【发布时间】:2019-02-11 22:33:17
【问题描述】:
我正在尝试编写一个 xpath 表达式来匹配 仅 包含给定属性的第一个后续祖先,但我找不到合适的 xpath。一个简化的 XML 示例:
<root>
<node href="L1_value_1">
<node href="L2_value_1">
<node href="L3_value_1">
<node href="L4_value_1"/>
</node>
</node>
<node/>
<node href="L2_value_2"/>
<node href="L2_value_3"/>
</node>
<node href="L1_value_2"/>
<node href="L1_value_3"/>
</root>
例如,如果我在包含 href="L4_value_1" 的节点上,我只想返回具有 href="L2_value_2" 的节点。不幸的是,我找不到正确的 xpath。我尝试了以下方法:
<xsl:apply-templates select="ancestor::*/following-sibling::*[@href][1]"/>
--返回每个祖先级别的第一个匹配的后续兄弟,即示例中包含L2_value_2和L1_value_2的节点。
<xsl:apply-templates select="ancestor::*[1]/following-sibling::*[@href][1]"/>
--在仅父级别返回第一个匹配的后续兄弟,即示例中没有任何内容。
我怎样才能尽可能地向上遍历树并且仅捕获第一个匹配项?
【问题讨论】:
-
如果
ancestor::*/following-sibling::*[@href][1]为您提供所有元素,那么(ancestor::*/following-sibling::*[@href][1])[1]为您提供文档顺序中的第一个元素。不确定这是否就是您所需要的。