Ответ @Kirill Polishchuk не является основным :
Предложено:
a:root/text()
Относительное выражение и если он не оценивается, имея корневой (/
) узел в качестве узла контекста, он ничего не выбирает в предоставленном документе XML.
Даже XPathвыражение: /a:root/text()
неверно , поскольку оно выбирает три текстовых узла - все дочерние текстовые узлы верхнего элемента - включая два текстовых узла только для пробелов.
Вот правильное решение XPath :
/a:root/text()[string-length(normalize-space()) > 0]
Когда это выражение Xpath применяется к предоставленному документу XML (исправлено, чтобы оно было правильно сформировано):
<a:root
xmlns:a="UNDEFINED !!!!"
xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3schools.com/furniture">
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
aaaaaaaaaaaaaa
</a:root>
Выбирает последний (и только не пропусковой) дочерний текстовый узел верхнего элемента, как требуется:
aaaaaaaaaaaaaa
Проверка на основе XSLT :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:a="UNDEFINED !!!!"
>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:text>"</xsl:text>
<xsl:copy-of select=
"/a:root/text()
[string-length(normalize-space()) > 0]"/>"
</xsl:template>
</xsl:stylesheet>
, когда это преобразование применяется к предоставленному XML-документу (выше), требуемый, правильно выбранныйТекстовый узел lecte выводится :
"
aaaaaaaaaaaaaa
"