XPath:如何在父元素中选择text()或span元素

时间:2012-05-30 20:24:48

标签: xpath

我有一个父元素(font),我想选择text()或span元素的所有子元素(直接后代)。我将如何构建这样的xpath?

1 个答案:

答案 0 :(得分:3)

如果当前节点是font元素,则类似这样的内容:

text()|span

否则你必须始终与|两个完整的XPath结合 - 一个用于文本,一个用于span,例如:

font/text()|font/span

如果当前节点刚好高于font - 或

//a[text()='View Larger Map']/../../../../div[contains(@class, 'paragraph')][3]/font/span|//a[text()='View Larger Map']/../../../../div[contains(@class, 'paragraph')][3]/font/text()

如果从具有一些复杂选择标准的根开始。

如果你有像前一个那样的复杂路径,最好将部分路径存储在变量中 - 例如在XSLT中:

<xsl:variable name="font" select="//a[text()='View Larger Map']/../../../../div[contains(@class, 'paragraph')][3]/font"/>

. . . 

<xsl:for-each select="$font/span|$font/text()">
  . . . 
</xsl:for-each>

另一种可能性是做这样的事情:

//a[text()='View Larger Map']/../../../../div[contains(@class, 'paragraph')][3]/font/node()[name()='span' or name()='']

可行,因为name()text()个节点返回一个空字符串 - 但我不是100%确定它对所有XPath处理器都是这样的,并且它可以通过错误的注释节点进行匹配。 / p>