3 xpath
我有以下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>
Run Code Online (Sandbox Code Playgroud)
我希望找到所有USER节点name="x"和ROLE节点的直接子节点,其属性"type"等于"C"及其祖先name="x"(可能通过使用祖先或自身轴).在这种情况下,节点集应包含两个节点(不是三个节点,因为B下的x的出现不应该计数).
什么是正确的XPath表达式呢?为什么以下表达式不起作用?
/ROLES//ROLE[@type='C']/USER[@name='x']/ancestor-or-self::USER[@name='x']
Run Code Online (Sandbox Code Playgroud)
(这只返回一个节点,可能是自身轴,而不是祖先)
任何帮助将非常感谢.
我想找到名称="x"的所有USER节点...
//USER[@name = 'x']
...具有属性"type"的ROLE节点的直接子节点等于"C"...
//USER[@name = 'x' and parent::ROLE[@type = 'C']]
......和他们的祖先名字="x".
?
我没有看到任何可能有名称="x"的祖先.你什么意思?
编辑:啊,我想我明白了.你的意思是:
...和他们的祖先的孩子USER名字="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是/ROLES("/ROLES//ROLE")的后代......@type='C'("/ ROLES // ROLE [@ type ='C']")...@name='x'(/USER[@name='x'])ancestor-or-self::USERŠ有@name='x'最后一个位置步骤打破了它.没有USER祖先,只有ROLE祖先.
| 归档时间: |
|
| 查看次数: |
10749 次 |
| 最近记录: |