【发布时间】:2012-05-30 20:24:48
【问题描述】:
我有一个父元素(字体),我想选择所有子元素(直接后代),它们是 text() 或 span 元素。我将如何构建这样的 xpath?
【问题讨论】:
标签: xpath
我有一个父元素(字体),我想选择所有子元素(直接后代),它们是 text() 或 span 元素。我将如何构建这样的 xpath?
【问题讨论】:
标签: xpath
如果当前节点是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 处理器,它可能会错误地匹配注释节点。
【讨论】: