gpt4 book ai didi

xslt - 用于选择没有同名子子项的子项的 XPath

转载 作者:行者123 更新时间:2023-12-03 16:06:29 24 4
gpt4 key购买 nike

我有一个 XML 片段

<main>
<sub1>
<element>
<sub2>
<element>
<sub3/>
</element>
</sub2>
</element>
</sub1>
<sub4>
<sub5>
<element>
<sub6>
<element>
<sub7/>
</element>
</sub6>
</element>
</sub5>
</sub4>
<sub8>
<element/>
</sub8>
</main>

如果 main 是当前节点,我可以像这样选择所有元素节点:
select=".//element"

在这个例子中,这给了我 5 个匹配项。但是如何只选择层次结构中的第一个元素节点,那么 sub1、sub5 和 sub8 之后的元素节点呢?我需要忽略在它们与原始主节点之间有另一个元素的所有元素。

其间的子节点的数量可以多于1个或2个,如上例中,示例中的主节点可以是上述另一个元素节点的一部分。

谢谢
ķ

最佳答案

一个可能的表达是

.//element[not(ancestor::element)]

即找到所有未被另一个“元素”元素包围(在任何级别)的“元素”元素。

编辑

如前所述,如果当前 ( main ) 元素本身被“元素”包围,则此表达式不会按原样工作。如果您在 XSLT 中并因此可以访问 current()函数,那么你可以使用类似的技巧
.//element[count(ancestor::element) = count(current()/ancestor::element)]

它选择那些与当前“主”元素具有相同数量的封闭“元素”元素(可能为零)的元素。根据您的处理器,使用变量可能更有效和/或更清晰
<xsl:variable name="depth" select="count(ancestor::element)" />
<xsl:apply-templates select=".//element[count(ancestor::element) = $depth]"/>

关于xslt - 用于选择没有同名子子项的子项的 XPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12254317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com