XPath根据GrandChild值选择根节点

时间:2018-04-23 21:26:22

标签: xpath

我有一个XML FIle,如下所示 -

<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:00:42</field>
            <field name="Verif">6064737</field>
        </row>
    </account>

我需要提取&#34;代码=&#34; XX&#34;&#34;基于Verif值。

我可以使用Xpath&amp;获取Verif值。然后我尝试使用父语法(例如

)到达root

/ ROOT /帐户/行/场[@name =&#39; ID&#39;和text()=&#34; 7650987&#34;] / parent :: *

上面的表达式返回空白。

我该如何改变?

3 个答案:

答案 0 :(得分:1)

首先,您的XML ROOT标记未关闭。你的XML应该完成 </ROOT>。在修复格式错误的xml 之前,没有xpath可行。当您关闭它时,您尝试的解决方案将不再是空白,尽管它不会是正确的:/ROOT/account/row/field[@name='ID' and text()="7650987"]/parent::*: 这意味着返回&#34;&#39;字段的父母&#39;名称为&#39; ID&#39; &#39; 7450978&#39;&#34;的文本,这将是整个XML块:

<row>
    <field name="ID">7650987</field>
    <field name="Length">00:02:37</field>
    <field name="Verif">6064625</field>
</row>

现在,您需要的是:&#34;&#39;帐户的代码值&#39;有一个孩子&#39;行/字段&#39;名称为&#39; ID&#39; &#39; 7450978&#39;&#34;

的文字

这可以翻译为:

//account[row/field/@name="ID" and row/field/text()="7650987"]/@code

我在在线XPATH测试仪上测试过它。

答案 1 :(得分:0)

尝试结束xml ROOT

<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:00:42</field>
            <field name="Verif">6064737</field>
        </row>
    </account>
</ROOT>

答案 2 :(得分:0)

这个XPath,

/ROOT/account[row/field[@name="ID"]="7650987"]/@code

将返回@code元素的account属性,其中row/field元素的@name属性值为"ID",字符串值为{{ 1}},按要求。