Как я могу разобрать XML с помощью Java? - PullRequest
2 голосов
/ 12 ноября 2009
<?xml version="1.0" ?> 
<input>
    <sys>
      <protocol>TL1</protocol> 
      <ipAddress>10.05.2.3</ipAddress>
      <port>2001</port>
      <prompt>agent</prompt>       
       <TL1Command>
           <type>get</type>
           <command_code>...........</command_code>
           <staging_block>      
                <tid>...........</tid>
                <aid>...........</aid>
                <ctag>..........</ctag>
                <gen_block>.....</gen_block>
           </staging_block>
           <payload_block>
                <data_block>.......</data_block>
           </payload_block>
    </TL1Command>
    </sys>
    <sys>
      <protocol>TL1</protocol> 
      <ipAddress>10.5.2.98</ipAddress>
      <port>2001</port>
      <prompt>agent</prompt>       
       <TL1Command>
           <type>get</type>
           <command_code>...........</command_code>
           <staging_block>      
                <tid>...........</tid>
                <aid>...........</aid>
                <ctag>..........</ctag>
                <gen_block>.....</gen_block>
           </staging_block>
           <payload_block>
                <data_block>.......</data_block>
                <data_block>.......</data_block>
                <data_block>.......</data_block>
           </payload_block>
    </TL1Command>
    </sys>
</input>

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

Ответы [ 12 ]

11 голосов
/ 12 ноября 2009

Существует два основных подхода к анализу XML.

  1. Подход на основе курсора (StAX) или события (SAX). Гораздо более легкий, но часто более многословный. Это особенно хорошо, когда вы хотите захватить только мелкие детали или обработка проста; и
  2. Древовидные подходы (DOM). Обычно парсеры DOM все равно строятся поверх парсеров SAX / StAX. Они требуют большей обработки и, как правило, требуют, чтобы у вас был целый документ в памяти, прежде чем вы сможете что-либо делать (тогда как SAX / StAX может быть намного более эффективным и быстрее реагировать). Но это полезно для «случайного» доступа к частям документа.

Выберите тот, который наиболее подходит для ваших обстоятельств.

2 голосов
/ 12 ноября 2009

Самый простой способ - загрузить документ как документ DOM

Тогда получите то, что вам нужно, используя XPath

Document document =  DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(inputStream);

NodeList nodeList = XPathAPI.selectNodeList(document, "/sys");
for (int i = 0; i < nodeList.getLength(); i++) {
    Node node = nodeList.item(i);
    System.out.println(node.getTextContent());
}

Ознакомьтесь с руководством по xpath здесь .

1 голос
/ 13 ноября 2009

используйте синтаксический анализатор DOM (объектная модель документа) или SAX (простой API для XML) для анализа вашего XML-документа. Сначала создайте документ XML. (файл с расширением .xml) скачать парсер по ссылке http://archive.apache.org/dist/xml/xerces-j/ и разобрать ваш документ

1 голос
/ 12 ноября 2009

Вы просто ищете библиотеку, которая позволит вам читать XML в граф объектов?

смотрите здесь список многих парсеров: http://java -source.net / open-source / xml-parsers

Очень часто используемая библиотека:

dom4j: http://www.dom4j.org/

Другой вопрос SO: Самый быстрый синтаксический анализатор XML для небольших простых документов на Java

1 голос
/ 12 ноября 2009

Вы можете рассмотреть Xpath (он относится к «древовидному подходу», как указано в cletus в этом разделе). Это наиболее удобный / простой подход, если все, что вам нужно, это просто получить значения из XML-документа.

Вот несколько полезных руководств по Xpath:
Чтобы узнать синтаксис: http://www.w3schools.com/Xpath/
Чтобы узнать, как использовать в Java: http://www.ibm.com/developerworks/library/x-javaxpathapi.html

0 голосов
/ 30 марта 2010

Я написал очень простой API именно по этой причине. Он использует анализатор DOM внизу, но предоставляет очень простой и удобный API, который позволяет вам действительно легко получить доступ к данным XML. Это всего лишь один файл Java, который вы можете использовать в качестве библиотеки в своем коде. Надеюсь, это поможет.

http://argonrain.wordpress.com/2009/10/27/000/

0 голосов
/ 12 ноября 2009

Возможно, вы также захотите узнать vtd-xml , другую библиотеку синтаксического анализа и индексации XML с открытым исходным кодом ...

0 голосов
/ 12 ноября 2009

Возможно, вы захотите использовать JAXB

0 голосов
/ 12 ноября 2009

Если вам нужно только получить фрагменты XML в / из графа объектов, вы можете рассмотреть XStream , которая представляет собой простую легкую библиотеку маршаллинга / демаршаллинга.

0 голосов
/ 12 ноября 2009

Мне очень нравится (и это только мое мнение) подход SAX, когда вы хорошо знаете структуру ваших файлов. Вот ссылка, которая может вам помочь Учебник SAX2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...