#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>