2010-01-04 2 views
1

У меня есть несколько большой файл (~ 500KiB) с большим количеством мелких элементов (~ 3000). Я хочу выбрать один элемент из этого и разобрать его на класс java.Какой XML-парсер следует использовать?

Атрибуты упрощенного

<xml>  
<attributes> 
    <attribute> 
    <id>4</id> 
    <name>Test</id> 
    </attribute> 

    <attribute> 
    <id>5</id> 
    <name>Test2</name> 
    </attribute> 

<!--3000 more go here--> 
</attributes> 

класса упрощенного

public class Attribute{ 
    private int id; 
    private String name; 

    //Mutators and accessors 

} 

Я вроде как XPath, но люди предложили Stax и даже ВДТ-XML. Что мне делать.

+0

У вас есть определенные потребности в производительности? Некоторые синтаксические анализаторы XML сканируются, другие быстро подходят для такого рода вещей. –

+0

Ну, я должен выбрать один элемент за раз. Производительность на самом деле не большая проблема. Но всегда о чем думать. Вы говорите, что за это такие быстрые люди. У вас есть примеры этого? –

+0

Как вы определяете, что вам нужно получить? Можете ли вы привести нам пример? – PSpeed

ответ

2

я комментировал выше, а также, потому что есть несколько вариантов, чтобы рассмотреть - но по звуку вашего первоначальное описание я думаю, вы могли бы уйти с простым процессором SAX здесь : что, вероятно, работать быстрее (хотя это не может выглядеть довольно, когда дело доходит до отображения класса Java), чем другие механизмы:

Там есть пример здесь, который соответствует довольно близко с вашим примером:

http://www.informit.com/articles/article.aspx?p=26351&seqNum=6

+0

+1, вот как я бы это сделал. Простые и низкие накладные расходы. Для чего-то более сложного, XPath - это простой запас. – PSpeed

+0

Спасибо за это. Я буду использовать это =) –

3

500 kb не такой большой. Если вам нравится XPath, идите на это.

+0

Хорошо спасибо ^^, но это только личное предпочтение. Я хотел бы знать, какие другие варианты там использовать. Какой будет лучший парсер для этой ситуации. –

1

Всякий раз, когда мне приходится иметь дело с XML, я просто использую XMLBeans. Это может быть излишним для того, что вам нужно, но это делает жизнь легкой (когда вы знаете, как ее использовать).

+0

Спасибо! Я прочитал первые несколько примеров, которые я мог бы найти по этому поводу. Я думаю, что буду использовать это в будущих проектах, но для этого это действительно похоже на перебор, потому что данные очень просты. Существует только один вид объекта, который я хочу получить. –

1

Если вам вообще не нужна производительность, Apache Digester может быть вам полезен, поскольку он уже инициализирует объекты Java для вас после определения правил.

+0

Да, мне нравится дайджестер для сопоставления с классами Java - работает довольно хорошо - и легко расширяется, если XML/классы эволюционируют со временем. – monojohnny

2

Избегайте всего, что является парсером DOM - нет необходимости в этом, особенно с большим-ish-файлом и относительно простым синтаксисом XML.

Какой конкретно использовать, к сожалению, я их не использовал, поэтому я не могу дать вам больше рекомендаций, чем смотреть на ваше лицензирование, производительность и поддержку (для вопросов).

+0

Согласитесь, что вам действительно не нужна DOM здесь - вы, вероятно, можете реализовать в SAX [как правило, быстрее]. (хотя использование DOM может облегчить вашу жизнь для сопоставления данных с классом, но в этом случае вы также можете пройти весь свиньи и использовать «Digester» для выполнения этой работы для вас. (или XMLBeans - лично не использовали это , так что не могу комментировать)). – monojohnny

2

Моя любимая библиотека XML является DOM4J

+0

Шахта тоже. Это очень доступно по сравнению с API JDK. –

3

Я вроде как XPath, но люди предлагали Stax и даже VDT-XML. Что мне делать.

DOM, SAX и VTD-XML - это три разных способа анализа XML-документа. Примерно в этом порядке эффективности памяти. DOM требует более 5 раз памяти, поскольку файл XML большой. SAX только немного эффективнее, VTD-XML использует только немного больше памяти, чем файл XML большой, примерно в 1,2 раза.

XPath - это всего лишь способ выбрать элементы и/или данные из (проанализированного) XML-документа.

Другими словами, вы можете просто использовать XPath в сочетании с любым из парсеров XML. Так что это, в конце концов, не вызывает беспокойства. Если вы просто хотите повысить эффективность и производительность памяти, перейдите на VTD-XML.

+0

С технической точки зрения, SAX имеет очень мало накладных расходов в парсере. Это то, что делает код с тем, что он анализирует, который будет использовать большую часть памяти. В качестве доказательства, если ваш обработчик данных не создает экземпляры каких-либо объектов, вы можете использовать синтаксический анализатор SAX для синтаксического анализа XML во много раз больше, чем будет в доступной ОЗУ. – PSpeed

Смежные вопросы