Синтаксический анализ XML в Java

#java #xml

#java #xml

Вопрос:

у меня есть структура ответа, которую я хочу проанализировать на Java. Кто-нибудь может мне помочь с этим?

     <message_response xmlns="">
      <action name="GETCIL">
        <param name="bookingNote" value="" require="" read-only=""><![CDATA[bookingNote]]></param>
        <param name="CarrierLinkType" value="" require="" read-only=""><![CDATA[True]]></param>
        <param name="Carrier" value="" require="" read-only=""><![CDATA[SK185]]></param>

 <param_list name="ViaAddressList" id="GETCIL">
      <value>
        <param_list name="ViaAddressId" id="ViaAddressList">
          <value><![CDATA[877765050_5511]]></value>
        </param_list>
        <param_list name="AddressDate" id="ViaAddressList">
          <value><![CDATA[10/12/2010]]></value>
        </param_list>
        <param_list name="AddressTime" id="ViaAddressList">
          <value><![CDATA[12:12]]></value>
        </param_list>
      </value>
    </param_list>


</action>
    </message_response>
  

Комментарии:

1. Существует множество способов синтаксического анализа XML в Java, и здесь есть тонны вопросов по этому поводу. Чтобы получить хороший ответ, вы должны быть намного более конкретными в том, что вы хотите сделать с XML. Преобразовать его в дерево объектов? Извлечь несколько выбранных значений? Преобразовать его в какой-либо другой формат?

2. да, я хочу извлечь значения из XML.

3. Голосование за повторное открытие, потому что xml был в вопросе, но не отображался, потому что он не был отформатирован как code .

Ответ №1:

Самый простой способ извлечь определенные значения из XML-документа (в отличие от синтаксического анализа всего документа с помощью SAX) — использовать XPath следующим образом:

 //1. load the document into memory.
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

//2. Create an XPath.
XPath xpath = XPathFactory.newInstance().newXPath();

//3. Evaluate the xpath expression.
String actionName = xpath.evaluate("/message_response/action/@name", documentBuilder.parse(xmlFile));
  

В этом нет ничего особенного, кроме того, что XPath.evaluate метод перегружен, чтобы разрешить возврат узлов и списков узлов (см. javax.xml.xpath.XPathConstants Типы).

Тогда вам просто нужно ознакомиться с синтаксисом xpath (http://www.w3schools.com/xpath/xpath_syntax.asp ).

Комментарии:

1. Спасибо за это. Действительно, очень полезно. Я вижу, как /message_response/action/param[11] выдает вам 11-й параметр в списке. Не могли бы вы, пожалуйста, помочь мне во вложенном <param-list> не удалось найти ни одного примера для этого. Я обновил XML. Большое вам спасибо

2. Вы можете сделать что-то вроде: NodeList viaAddressList = (NodeList)xpath.evaluate("/message_response/param_list[@name="ViaAddressList"]/value/param_list", documentBuilder.parse(xmlFile), XPathConstants.NodeList);

Ответ №2:

Зачем разделы CDATA вокруг данных?

Для синтаксического анализа XML можно использовать SAX или DOM.

Существуют также библиотеки, обертывающие анализаторы SAX и DOM, которые облегчают вашу жизнь при выполнении обычных задач. Два, которые приходят на ум для Java, — это JDOM и DOM4J. Погуглите для них — доступны руководства и примеры, которые покажут вам, что вам нужно знать.

Комментарии:

1. Это формат, в котором я получаю данные. Не могли бы вы, пожалуйста, дать мне какой-нибудь код для повторения. Я новичок в этом. Спасибо.