我正在使用Nokogiri。
假设我有一个嵌套深的路径:
//h1/h2/h3/h4/h5
我认为我可以使用以下路径:
//h1/*/*/*/h5
有没有办法避免使用多个星号?例如类似于//h1/.../h5
这样的方法?
我不想一直数嵌套的层数。
//h1//h5
或者您可能喜欢更简单的CSS样式:
h1 h5
如果你想选择所有距离它们的h1祖先正好4级的h5
,那么可以使用以下代码:
//h5[ancestor::*[4][self::h1]]
XSLT基于的验证:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="//h5[ancestor::*[4][self::h1]]"/>
</xsl:template>
</xsl:stylesheet>
当将此转换应用于以下 XML 文档时:
<t>
<head/>
<body>
<h1>First Main title
<a>
<b>
<c>
<h5 id="id1"/>
<d>
<h5 id="id2"/>
</d>
</c>
</b>
</a>
</h1>
</body>
</t>
在这里,XPath表达式被评估,评估结果(选择的h1
元素,在本例中仅为一个)被复制到输出中。
<h5 id="id1"/>
如果您不想计算中间级别的数量,但确定它们不超过某个数量(比如7),可以这样写:
//h1[descendent::*[not(position() > 7)][self::h1]]
这选择任何一个h1
的任何h5
后代,其中h1
和后代h5
之间的“距离”在级别上不超过7个。
请注意:
像下面这样的表达式——如其他答案所建议:
//h1//h5
错误地选择了上述文档:
<h5 id="id1"/>
<h5 id="id2"/>
两个选定的h5
元素中第二个距其h1
祖先更远。
h5
标签还是只需要特定的一个?如果您需要特定的一个,那么您是否有h5
的 ID 或 CLASS 可以帮助您导航到它,或者有关于特定标签的某些具体信息可以用作标志? - the Tin Man