XPath select 文本,部分除外
XPath select text except some parts
如果我想提取 "TEXT 1" 但 而不是 "TEXT 2" 和 "TEXT 3",我该如何编写 XPath 表达式?
<div class="content">
<div>
<p>
TEXT 1 <span class="author"> TEXT 2</span>
<a href="http://www.example.com" class="more" name="_chf_A_xxlformat_">TEXT 3</a>
</p>
</div>
</div>
试试这个:
<xsl:value-of select="text()"/>
您可能做过 <xsl:value-of select="."/>
,它获取当前节点并将其递归地转换为文本。 text()
仅选择文本节点,不包括子元素和属性。
这是上下文的完整 XSLT:
<?xml version="1.0"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="p">
<out>
<xsl:value-of select='text()'/>
</out>
</xsl:template>
</xsl:stylesheet>
试试这个 XPath:
$x("(//div[@class='content']/div/p/text())[1]");
也许它不是很有效,但它似乎在起作用 :)
请注意,[1] 将获得文本的第一次出现,如果更改文本位置,它将无法正常工作。
此致,
安德莉亚
此 XPath 将 select 作为 p
的直接子节点的文本节点
//div[@class='content']/div/p/text()
,因此将排除 "TEXT 2" 和 "TEXT 3"。
您可能更愿意消除前导和尾随空格(并替换重复的内部空格,但不管这里如何):
//div[@class='content']/div/p/text()[normalize-space()]
在 XPath 1.0 和 XPath 2.0 中计算为 "TEXT 1"。
如果我想提取 "TEXT 1" 但 而不是 "TEXT 2" 和 "TEXT 3",我该如何编写 XPath 表达式?
<div class="content">
<div>
<p>
TEXT 1 <span class="author"> TEXT 2</span>
<a href="http://www.example.com" class="more" name="_chf_A_xxlformat_">TEXT 3</a>
</p>
</div>
</div>
试试这个:
<xsl:value-of select="text()"/>
您可能做过 <xsl:value-of select="."/>
,它获取当前节点并将其递归地转换为文本。 text()
仅选择文本节点,不包括子元素和属性。
这是上下文的完整 XSLT:
<?xml version="1.0"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="p">
<out>
<xsl:value-of select='text()'/>
</out>
</xsl:template>
</xsl:stylesheet>
试试这个 XPath:
$x("(//div[@class='content']/div/p/text())[1]");
也许它不是很有效,但它似乎在起作用 :) 请注意,[1] 将获得文本的第一次出现,如果更改文本位置,它将无法正常工作。
此致, 安德莉亚
此 XPath 将 select 作为 p
//div[@class='content']/div/p/text()
,因此将排除 "TEXT 2" 和 "TEXT 3"。
您可能更愿意消除前导和尾随空格(并替换重复的内部空格,但不管这里如何):
//div[@class='content']/div/p/text()[normalize-space()]
在 XPath 1.0 和 XPath 2.0 中计算为 "TEXT 1"。