gpt4 book ai didi

xml - XPath 和棘手的嵌套节点

转载 作者:数据小太阳 更新时间:2023-10-29 02:24:18 25 4
gpt4 key购买 nike

给定以下棘手的 XML:

<Type>
<ID></ID>
<Name></Name>
<Child>
<Type>
<ID></ID>
<Name></Name>
<Child>
<Type>
<ID></ID>
<Name></Name>
<Child>
<Type>
<ID></ID>
<Name></Name>
<Child>
<Type>
<ID></ID>
<Name>FIND ME</Name>
</Type>
</Child>
</Type>
</Child>
</Type>
</Child>
</Type>
</Child>
</Type>

是否可以获取最深的Type's Name字段?我试过这样的结构:

//*not(*)

但没有结果..

最佳答案

我。这个简短的 XPath 1.0 表达式:

//*[not(../*/*)]

根据提供的 XML 文档进行评估时:

<Type>
<ID></ID>
<Name></Name>
<Child>
<Type>
<ID></ID>
<Name></Name>
<Child>
<Type>
<ID></ID>
<Name></Name>
<Child>
<Type>
<ID></ID>
<Name></Name>
<Child>
<Type>
<ID></ID>
<Name>FIND ME</Name>
</Type>
</Child>
</Type>
</Child>
</Type>
</Child>
</Type>
</Child>
</Type>

选择这两个元素:

<ID/>
<Name>FIND ME</Name>

因此,在您的情况下,一个产生所需结果的 XPath 表达式是:

//*[not(../*/*)]/Name

二。通用 XPath 1.0 表达式,在已知最大深度不大于给定数字时选择具有最大深度的元素:

   //*[count(ancestor::*) >= 9]
|
//*[not(//*[count(ancestor::*) >= 9])]
[count(ancestor::*) = 8]
|
//*[not(//*[count(ancestor::*) >= 8])]
[count(ancestor::*) = 7]
|
//*[not(//*[count(ancestor::*) >= 7])]
[count(ancestor::*) = 6]
|
//*[not(//*[count(ancestor::*) >= 6])]
[count(ancestor::*) = 5]
|
//*[not(//*[count(ancestor::*) >= 5])]
[count(ancestor::*) = 4]
|
//*[not(//*[count(ancestor::*) >= 4])]
[count(ancestor::*) = 3]
|
//*[not(//*[count(ancestor::*) >= 3])]
[count(ancestor::*) = 2]
|
//*[not(//*[count(ancestor::*) >= 2])]
[count(ancestor::*) = 1]

|
/*[not(//*[count(ancestor::*) >= 1])]

虽然这看起来很长而且很笨重,但 XML 文档通常不超过 4-5 层深,这样的表达实际上很实用


III.通用 XPath 2.0 解决方案:

//*[not(*) and count(ancestor::*) = max(//*/count(ancestor::*))]

关于xml - XPath 和棘手的嵌套节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13752964/

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