Elias Giannopoulos
Elias Giannopoulos

Reputation: 144

XPath select child node based on multy child nodes attributes

<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>

I need help with the XPATH query in order to select

ACTION/PARAM[@Name="Points"]/Data (in order todo SUM)

Where

ACTION[NParam="7"] AND

ACTION/PARAM[@Name="Team"][Data="1"] AND

ACTION/PARAM[@Name="Made"][Data="0"] AND

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

I know how to select but using only one child!!!

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

Thanks in advance for your help.

Upvotes: 0

Views: 139

Answers (1)

har07
har07

Reputation: 89285

It isn't clear what is the expected output exactly. Assuming you want to find ACTION that match multiple criteria based on multiple PARAM's attributes, you may want to follow XPath example below :

/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

Given the XML in this question as input, the output would be :

<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>

Upvotes: 1

Related Questions