【问题标题】:XPath select child node based on multy child nodes attributesXPath 根据多个子节点属性选择子节点
【发布时间】:2016-10-08 08:16:22
【问题描述】:
<NETCAST>
    <ACTION NParam="7" ShortName="shot" Quarter="1" Position="27">
        <PARAM Data="2" Name="Team"/>
        <PARAM Data="2" Name="Player"/>
        <PARAM Data="0" Name="Made"/>
        <PARAM Data="2" Name="Points"/>
        <PARAM Data="1" Name="AddFlags"/>
    </ACTION>
    <ACTION NParam="2" ShortName="assist" Quarter="1" Position="28">
        <PARAM Data="2" Name="Team"/>
        <PARAM Data="21" Name="Player"/>
    </ACTION>
    <ACTION NParam="7" ShortName="shot" Quarter="1" Position="29">
        <PARAM Data="1" Name="Team"/>
        <PARAM Data="21" Name="Player"/>
        <PARAM Data="0" Name="Made"/>
        <PARAM Data="3" Name="Points"/>
        <PARAM Data="0" Name="AddFlags"/>
    </ACTION>
    <ACTION NParam="7" ShortName="shot" Quarter="1" Position="30">
        <PARAM Data="2" Name="Team"/>
        <PARAM Data="32" Name="Player"/>
        <PARAM Data="0" Name="Made"/>
        <PARAM Data="3" Name="Points"/>
        <PARAM Data="4" Name="AddFlags"/>
    </ACTION>
    <ACTION NParam="3" ShortName="reb" Quarter="1" Position="31">
        <PARAM Data="1" Name="Team"/>
        <PARAM Data="-2" Name="Player"/>
        <PARAM Data="1" Name="Type"/>
    </ACTION>
    <ACTION NParam="7" ShortName="shot" Quarter="1" Position="32">
        <PARAM Data="1" Name="Team"/>
        <PARAM Data="15" Name="Player"/>
        <PARAM Data="1" Name="Made"/>
        <PARAM Data="2" Name="Points"/>
        <PARAM Data="3" Name="AddFlags"/>
    </ACTION>
</NETCAST>

我需要 XPATH 查询方面的帮助才能选择

ACTION/PARAM[@Name="Points"]/Data(为了做 SUM)

在哪里

动作[NParam="7"] 和

动作/参数[@Name="Team"][Data="1"] AND

动作/参数[@Name="Made"][Data="0"] AND

ACTION/PARAM[@Name="AddFlags"][Data="1" or "3" or "4"]

我知道如何选择但只使用一个孩子!!!

/NETCAST/ACTION[NParam=7]/PARAM[@Name="Points"]/@Data

提前感谢您的帮助。

【问题讨论】:

    标签: xml xpath


    【解决方案1】:

    目前尚不清楚预期的输出究竟是什么。假设您想根据多个 PARAM 的属性找到匹配多个条件的 ACTION,您可能需要遵循以下 XPath 示例:

    /NETCAST
    /ACTION[
        @NParam=7 and
        PARAM[@Name="Team" and @Data="1"] and
        PARAM[@Name="Made" and @Data="0"] and
        PARAM[@Name="AddFlags"][@Data="0" or @Data="3" or @Data="4"]
    ]
    

    xpath demo

    鉴于此问题中的 XML 作为输入,输出将是:

    <ACTION NParam="7" ShortName="shot" Quarter="1" Position="29">
       <PARAM Data="1" Name="Team"/>
       <PARAM Data="21" Name="Player"/>
       <PARAM Data="0" Name="Made"/>
       <PARAM Data="3" Name="Points"/>
       <PARAM Data="0" Name="AddFlags"/>
    </ACTION>
    

    【讨论】:

    • 您建议的 Xpath 可以用于查询,但我需要得到的结果不是整个 ACTION 节点。对于上述结果,我只需要 。使用您的答案 + /PARAM[@Name="Points"],我明白了。感谢您准确、快速的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    相关资源
    最近更新 更多