如何编写基于孙节点值选择根节点的XPath表达式?
没问题,针对你给出的XML结构,我来帮你写出基于孙节点(也就是<field>节点)值选择<account>节点的XPath表达式,分几种常见场景说明:
先把你的示例XML补全(方便参考):
<ROOT> <account name="ABC" code="XX"> <row> <field name="ID">7650987</field> <field name="Length">00:02:37</field> <field name="Verif">6064625</field> </row> <row> <field name="ID">7651474</field> <field name="Length">00:01:08</field> <field name="Verif">6065064</field> </row> <row> <field name="ID">7651105</field> <field name="Length">00:03:12</field> <field name="Verif">6064890</field> </row> </account> </ROOT>
1. 匹配包含任意符合条件的<field>的<account>
比如要选择所有包含ID为7650987的<field>节点的<account>,表达式如下:
//account[.//field[@name='ID' and text()='7650987']]
- 解释:
//account:定位到XML中所有的<account>节点[.//field[@name='ID' and text()='7650987']]:筛选条件,只保留当前<account>节点下(任意层级)存在<field>节点,且该节点的name属性为ID、文本值为7650987的<account>
2. 匹配同一个<row>下满足多个条件的<account>
如果需要找同一个<row>下同时满足ID为7651474、Verif为6065064的<account>,要用更精确的表达式:
//account[row[field[@name='ID' and text()='7651474'] and field[@name='Verif' and text()='6065064']]]
- 解释:这里把两个
<field>的条件都放在同一个<row>的判断里,确保是同一行的两个字段同时符合要求,而不是不同行的字段分别符合。
3. 匹配特定位置的<row>下的<field>
如果要定位第一个<row>下ID为7650987的<account>,可以用索引来限定:
//account[row[1]/field[@name='ID' and text()='7650987']]
- 解释:
row[1]表示选中<account>下的第一个<row>节点,再判断其下的<field>是否符合条件。
你可以根据自己的实际需求,修改表达式中的name属性值、文本值或者条件逻辑(比如用contains()模糊匹配,比如contains(text(), '765')来匹配文本包含765的<field>)。
内容的提问来源于stack exchange,提问作者Anup
相关产品推荐
相关产品推荐

