0

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

4

1 回答 1

3

如果当前节点是font元素,则如下所示:

text()|span

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

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 处理器,并且它可能会错误地匹配注释节点。

于 2012-05-30T20:33:51.323 回答