Как извлечь текст такого элемента через XPath:
<document>
some text
<subelement>subelement text</subelement>
postscript
</document>
Выражение XPath:
/document
возвращает текст узла документа и текст всех его подузлов:
some text subelement text postscript
В то время как выражение XPath:
/document/text()
возвращает только первый текстовый узел:
some text
то есть отсутствует "postscript".
Вопрос
Есть ли способ получить текст всех текстовых узлов, которые являются непосредственными сыновьями <document>
?
Постскриптум
Очень сфокусированный пример, если вы хотите проверить себя, скопируйте в основной метод и исправьте импорт.
DocumentBuilder dbuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
String xml = "<?xml version='1.0' encoding='UTF-8'?>" +
"<document>"
+ "some text into document"
+ " <subelement>"
+ " some text into SUBelement"
+ " </subelement>"
+ "POSTSCRIPT"
+ "</document>";
//i'm forced to use an InputSource because parse doesn't take readers directly :-(
Document doc = dbuilder.parse(new InputSource(new StringReader(xml)));
//usual way to get an xpath
XPath xp = XPathFactory.newInstance().newXPath();
System.out.println(xp.evaluate("/document", doc));
System.out.println(xp.evaluate("/document/text()",doc));