Синтаксический анализ XML на Java (Android)

#java #android #xml #parsing

#java #Android #xml #синтаксический анализ

Вопрос:

У меня есть XML-запрос от веб-службы. Это выглядит примерно так. Итак, как я могу получить значение OrderID? Я никогда не работаю с XML на Java.

 <order1s uri="http://mywebsite/rest/create_order">
<order1 uri="http://mywebsite/rest/create_order/401/"> 
<customer uri="http://mywebsite/rest/create_order/401/customer/">
<name/>
<passengerId>123</passengerId>
<phone/>
<rating>0.0</rating>
<restToken>
985y3289y5v43535v032m0v3v0b0jcrmjsa9w20m02umc3
</restToken>
<surname/>
</customer>
<offerCollection uri="http://mywebsite/rest/create_order/401/offerCollection/"/>
<orderId>401</orderId>
<orderWaypointsCollection uri="http://mywebsite/rest/create_order/401/orderWaypointsCollection/">
<orderWaypoints uri="http://mywebsite/rest/create_order/401/orderWaypointsCollection/null/">
<isStartPoint>true</isStartPoint>
<latitude>50.505463</latitude>
<longitude>30.44121</longitude>
<norder uri="http://mywebsite/rest/create_order/401/orderWaypointsCollection/null/norder/"/>
</orderWaypoints>
<orderWaypoints uri="http://mywebsite/rest/create_order/401/orderWaypointsCollection/null/">
<isStartPoint>false</isStartPoint>
<latitude>50.4501</latitude>
<longitude>30.5234</longitude>
<norder uri="http://mywebsite/rest/create_order/401/orderWaypointsCollection/null/norder/"/>
</orderWaypoints>
</orderWaypointsCollection>
<status>1</status>
<toDate>19/05/2011 17:49:12</toDate>
<toNow>true</toNow>
</order1>
</order1s>
  

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

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

Ответ №1:

Я предлагаю использовать XPath:

Это будет что-то вроде:

 XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "orderId";
InputSource inputSource = new InputSource(xmlInputStreamOrReaderOrSomethingElse). 
String id = (String) xpath.evaluate(expression, inputSource, XPathConstants.STRING);
  

Обновлено:

выражение должно быть "//orderId" : example

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

1. @Дима Свинаренко: да, извините. Это должно быть String expression = "//orderId"; я проверяю на этом примере.

Ответ №2:

Если вы хотите разобрать его с помощью средств, встроенных в платформу, вы можете использовать SAX DefaultHandler . Здесь есть куча ответов, которые указывают на учебные пособия.

Если вам нужно только orderId значение и ни одно из других значений, то я бы предложил просто использовать регулярное выражение типа:

 <orderId>(d )</orderId>