#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. Это формат, в котором я получаю данные. Не могли бы вы, пожалуйста, дать мне какой-нибудь код для повторения. Я новичок в этом. Спасибо.