gpt4 book ai didi

xpath - 祖先或 self

转载 作者:行者123 更新时间:2023-12-03 15:48:40 24 4
gpt4 key购买 nike

我有以下 xml:

<?xml version="1.0" encoding="utf-8" ?>
<ROLES>
<ROLE type="A">
<USER name="w" />
<USER name="x" />
<ROLE type="B">
<USER name="x" />
<USER name="y" />
</ROLE>
<ROLE type="C">
<USER name="x" />
<USER name="y" />
<USER name="z" />
</ROLE>
</ROLE>
<ROLE type ="D">
<USER name="w" />
</ROLE>
</ROLES>

并且我想找到所有具有 name="x" 的 USER 节点,它们是具有属性“type”等于“C”的 ROLE 节点的直接子节点及其具有 name= 的祖先节点“x”(可能通过使用祖先或 self 轴)。在这种情况下,节点集应该包含两个节点(不是三个,因为在 B 下出现 x 应该不算)。

正确的 XPath 表达式是什么?为什么下面的表达式不起作用?

/ROLES//ROLE[@type='C']/USER[@name='x']/ancestor-or-self::USER[@name='x']

(这只返回一个节点,可能是自轴,而不是祖先)

任何帮助将不胜感激。

最佳答案

I want to find all USER nodes with name="x"…

//USER[@name = 'x']

…which are immediate children of ROLE nodes with attribute "type" equals "C"…

//USER[@name = 'x' and parent::ROLE[@type = 'C']]

…and their ancestors with name="x".

?

我没有看到任何可能具有 name="x"的祖先。什么意思?


编辑:啊,我想我明白了。你的意思是:

...以及他们的祖先的 child ,他们是 USER 的 name="x"

//USER[@name = 'x' and parent::ROLE[@type = 'C']]/ancestor::ROLE/USER[@name = 'x']

现在回答为什么您的 XPath 不起作用的问题:

/ROLES//ROLE[@type='C']/USER[@name='x']/ancestor-or-self::USER[@name='x']

选择

  • /ROLES 的所有 ROLE ("/ROLES//ROLE")...
  • ...具有@type='C' ("/ROLES//ROLE[@type='C']")...
  • ...他们的 USER child 中有 @name='x' (/USER[@name='x'])
  • …然后所有 ancestor-or-self::USER 都有 @name='x'

最后的定位步骤打破了它。没有 USER 祖先,只有 ROLE 祖先。

关于xpath - 祖先或 self ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/852215/

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