Среда: Windows 10, Eclipse, Java 1.5
Цель:
Я пытаюсь получить текстовое значение элемента XML с помощью xPath. Xml содержит различные пространства имен.
Проблема: Я всегда получаю пустое значение.
Я проверил несколько потоков на SO, но ничего не получалось. Абсолютный путь xml прекрасно открывается в браузере.
Вот что у меня есть:
//Initialize objects
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
builderFactory.setNamespaceAware(true);
builder = builderFactory.newDocumentBuilder();
Document xmlDocument = builder.parse(xmlFINAL);//File with absolute path
XPath xPath = (XPath) XPathFactory.newInstance().newXPath();
//NamespaceContext used for xPath
NamespaceContext nsContext = new NamespaceContext (){
public String getNamespaceURI(String prefix) {
if (prefix == null) {
throw new NullPointerException("Null prefix");
} else if ("ns2".equals(prefix)) {
return "http://ns2";
}else{
return "http://ns1";
}
}
public String getPrefix(String namespaceURI) {
return null;
}
public Iterator getPrefixes(String namespaceURI) {
return null;
}
};
xPath.setNamespaceContext(nsContext);
Это часть содержимого документа
Тест XML (мой слишком большой):
<root_element xmlns="http://ns1" xmlns:ns2="http://ns2">
<element1>
...
<ns2:element2>
<ns2:element3>I want this text</element3>
</element2>
...
</element1>
</root_element >
Получение значения элемента (которое всегда возвращает ""
):
String expression = "/root_element/element1/ns2:element2/ns2:element3/text()";
String valor = (String) xPath.compile(expression).evaluate(xmlDocument,XPathConstants.STRING);
//or
String valor = xPath.evaluate(expression, xmlDocument);