我有一个父元素(font),我想选择text()或span元素的所有子元素(直接后代)。我将如何构建这样的xpath?
答案 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>