2016-11-11 6 views
1

Ich habe die folgende XML:XPath zum Auswählen eines XML-Knotens ohne einen untergeordneten Knoten mit einem bestimmten Wert?

<?xml version="1.0" encoding="UTF-8"?> 
<targets> 
    <target sanctions-set-id="4387" ssid="5762"> 
     <individual> 
      <identity ssid="5764" main="true"> 
       <name ssid="27036" name-type="primary-name"> 
        <value>SomeName1</value> 
       </name> 
      </identity> 
     </individual> 
     <modification modification-type="de-listed" enactment-date="2016-02-29" publication-date="2016-03-01" effective-date="2016-03-01"/> 
     <modification modification-type="amended" enactment-date="2015-11-17" publication-date="2015-11-18" effective-date="2015-11-18"/> 
     <modification modification-type="amended" enactment-date="2014-11-27" publication-date="2014-11-28" effective-date="2014-11-28"/> 
     <modification modification-type="amended" enactment-date="2013-12-18" publication-date="2013-12-19" effective-date="2013-12-20"/> 
     <modification modification-type="listed"/> 
    </target> 
    <target sanctions-set-id="4388" ssid="5763"> 
     <individual> 
      <identity ssid="5765" main="true"> 
       <name ssid="27037" name-type="primary-name"> 
        <value>SomeName2</value> 
       </name> 
      </identity> 
     </individual> 
     <modification modification-type="amended" enactment-date="2015-11-17" publication-date="2015-11-18" effective-date="2015-11-18"/> 
     <modification modification-type="amended" enactment-date="2014-11-27" publication-date="2014-11-28" effective-date="2014-11-28"/> 
     <modification modification-type="amended" enactment-date="2013-12-18" publication-date="2013-12-19" effective-date="2013-12-20"/> 
     <modification modification-type="listed"/> 
    </target> 
</targets> 

Ich brauche jeden Zielknoten auswählen, die keine untergeordneten Knoten modifikations Typ dekotiert hat. Mit anderen Worten, mein xpath sollte nur das zweite Ziel von SomeName2 zurückgeben, da es keinen dekotierten Modifikationstyp gibt.

Dies ist die nächste, die ich bekommen konnte, aber es wählt immer noch beide aus.

targets/target[modification[@modification-type != 'de-listed']] 

Antwort

1

Der Grund Ihrer XPath beide ist die Auswahl ist, weil beide Werte modification Elemente mit @modification-type gleich haben Sie Attribut andere als de-listed. Verwenden Sie not() statt != ...

Diese XPath,

//target[not(modification[@modification-type = 'de-listed'])] 

wählt alle target Elemente mit keinemodification Kinder mit modification-type zu de-listed gleich Attributen.

+0

Genau das, was ich brauchte. Vielen Dank. –

Verwandte Themen