Я попытался добавить /text()
к выражению, которое также ничего не возвращает
Это выбирает все дочерние текстовые узлы узла контекста -- и их три.
То, что вы называете «ничем», наиболее вероятно, является первым из них, который является текстовым узлом только для пробелов (таким образом, вы видите «ничто» в нем).
Вам нужно: :
//span[@id='span-id']/text()[3]
Конечно, возможны и другие варианты :
//span[@id='span-id']/text()[last()]
Или:
//span[@id='span-id']/br/following-sibling::text()[1]
Проверка на основе XSLT :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
"<xsl:copy-of select="//span[@id='span-id']/text()[3]"/>"
</xsl:template>
</xsl:stylesheet>
Это преобразование просто выводит то, что выбрано в выражении XPath.При применении к предоставленному документу XML (комментарий удален):
<span id="span-id">
<b>bold title</b>
<br/>
text here that I want to grab....
</span>
желаемый результат получается :
"
text here that I want to grab....
"