Я очень новичок в XPath, и у меня есть следующая проблема:
У меня есть метод Java, который получает данные от веб-сервисов, и эти данные находятся в XML-документе, поэтому мне нужно использовать XPath, чтобы получить определенное значение внутри этого результирующего XML-документа.
В частности, у меня есть весь вывод XML, предоставленный моей веб-службой (ответ веб-службы):
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<getConfigSettingsResponse xmlns="http://tempuri.org/">
<getConfigSettingsResult><![CDATA[<root>
<status>
<id>0</id>
<message></message>
</status>
<drivers>
<drive id="tokenId 11">
<shared-secret>Shared 11</shared-secret>
<encoding>false</encoding>
<compression />
</drive>
<drive id="tokenId 2 ">
<shared-secret>Shared 2 </shared-secret>
<encoding>false</encoding>
<compression>false</compression>
</drive>
</drivers>
</root>]]></getConfigSettingsResult>
</getConfigSettingsResponse>
</s:Body>
</s:Envelope>
Теперь в классе Java я выполняю следующие операции:
XPath xPath; // An utility class for performing XPath calls on JDOM nodes
Element objectElement; // An XML element
//xPath = XPath.newInstance("s:Envelope/s:Body/getVersionResponse/getVersionResult");
try {
// XPath selection:
xPath = XPath.newInstance("s:Envelope/s:Body");
xPath.addNamespace("s", "http://schemas.xmlsoap.org/soap/envelope/");
objectElement = (Element) xPath.selectSingleNode(documentXML);
if (objectElement != null) {
result = objectElement.getValue();
System.out.println("RESULT:");
System.out.println(result);
}
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
и результатом печати содержимого переменной result является следующий вывод:
RESULT:
<root>
<status>
<id>0</id>
<message></message>
</status>
<drivers>
<drive id="tokenId 11">
<shared-secret>Shared 11</shared-secret>
<encoding>false</encoding>
<compression />
</drive>
<drive id="tokenId 2 ">
<shared-secret>Shared 2 </shared-secret>
<encoding>false</encoding>
<compression>false</compression>
</drive>
</drivers>
</root>
Теперь моя проблема заключается в том, что я хочу получить доступ только к содержимому тега 0, поэтому я хочу, чтобы (в данном случае) моя переменная result содержала >0 значение.
Но я не могу, я попытался изменить предыдущий выбор XPath с помощью:
xPath = XPath.newInstance("s:Envelope/s:Body/s:status/s:id");
Но поступая таким образом, я получаю, что мой objectElement равен null.
Почему? Что мне не хватает? Что мне нужно сделать, чтобы переменная результата mu содержала содержимое тега id?
Tnx
Андреа