2010-12-07 2 views
0

Можно создать дубликат:
Best method to parse various custom XML documents in JavaXML Синтаксический в Java

HI все,

Я новичок в Java. Я надеюсь, что вопрос, который я задаю, может быть легким. Мой вопрос в том, что если бы у меня был XML-файл, и я хочу его проанализировать, он получает элементы только в определенном теге. , например, если XML-файл выглядит следующим образом ..

<date>2005-10-31</date> 
<number>12345</number> 

<purchased-by> 
    <name>My name</name> 
    <address>My address</address> 
</purchased-by> 

    <order-items> 

    <item> 
     <code>687</code> 
     <type>CD</type> 
     <label>Some music</label> 
    </item> 

    <item> 
     <code>129851</code> 
     <type>DVD</type> 
     <label>Some video</label> 
    </item> 

</order-items> 

И из этого XML Я хочу, чтобы разобрать только элементы с именем тега порядок-элементы.

Есть ли общий способ сделать это? .. Пожалуйста, дайте мне знать .. Спасибо

+5

У вас больше шансов получить справку, если вы прочитаете, как разбирать XML в Java, попробуйте сами выяснить и поставить вопрос здесь - с образцом кода - когда вы застряли. Хорошим местом для начала является поиск в Google [java xml] (http://www.google.com.au/search?sourceid=chrome&ie=UTF-8&q=java+xml). – 2010-12-07 10:18:47

+0

Согласитесь с @Marcelo Cantos, этот вопрос также задавался много раз в SO, поэтому вы можете выполнить поиск здесь. – 2010-12-07 10:21:46

+1

Не эти люди Google? Я уже много раз отвечал на подобные вопросы. – 2010-12-07 11:22:53

ответ

4

Как сказано в комментариях, короткий поисковый запрос Google должен привести вас к SUN examples on how to do this. В принципе, у вас есть два основных метода XML разбора в Java:

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

Еще один очень полезный метод синтаксического анализа XML, хотя и немного более свежий, чем эти, и включен в JRE только с Java6, составляет StAX. StAX был задуман как медиальный метод между древовидной структурой DOM и основанным на событиях SAX. Это очень похоже на SAX в том, что синтаксический анализ очень больших документов прост, но в этом случае приложение «вытаскивает» информацию из анализатора, а не синтаксический анализ «pushing» событий в приложение. Вы можете найти больше объяснений по этому вопросу here.

Итак, в зависимости от того, чего вы хотите достичь, вы можете использовать один из этих подходов.

0

Это классический случай для SAX. Обработчик регистра, который получает теги и игнорирует все теги, отличные от элементов заказа.

Возможно, лучший способ - использовать Apache Digester, но он слишком завышен для вашей конкретной задачи.

+1

Я бы сказал, XPath проще – willcodejavaforfood 2010-12-07 10:25:05

1

Использование XPath. Он позволяет выбирать узлы по их имени и нагрузкам других условий. Очень мало кода для настройки.

IBM Example

0

Вы можете использовать DOM Parser для построения Document и затем извлечь любые элементы, которые вы хотите с помощью метода getElementsByTagName.

Вот некоторые примеры кода, чтобы помочь вам начать работу:

//parse file and build Document 
    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("file.xml")); 

    //get list of elements called order-items 
    NodeList orderItemsNodes = doc.getElementsByTagName("order-items"); 

    //iterate over the elements 
    for(int i = 0 ; i <orderItemsNodes.getLength();i++){ 
     Node orderItemNode = orderItemsNodes.item(i); 
    } 
2

Если вы хотите ограничить саму операцию синтаксического анализа для <order-items> элемента, то вы должны будете использовать SAX. Анализатор SAX посещает все элементы входного «файла» (или потока), и вы можете определить, что анализатор должен игнорировать что-либо, что не<order-items> или любой из его детей. Результатом будет Document, содержащий только эти элементы.

Если документы xml довольно малы, а производительность не является ограничивающим фактором, просто проанализируйте весь документ (это двухстрочный) и используйте выражения XPath для выбора правильных узлов.

0

Это, честно, зависит от того, как вы планируете использовать данные . Если вы хотите, чтобы разобрать его в объект, а затем работать с ним, я хотел бы использовать JAXB маршалинг, но если вы просто хотите лишить строковые значения из кода, типа и этикетки атрибутов каждого элемента элемента, вы можете просто рассмотреть возможность простого сопоставления регулярных выражений по содержимому строки xml для каждого элемента item, а затем сопоставить каждый атрибут и извлечь его значение.

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