2016-11-11 2 views
1

У меня есть следующий XML:XPath для выбора узла XML без дочернего узла с определенным значением?

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

Мне нужно выбрать любой целевой узел, который не имеет дочерний узел модификации типа делистинг. Другими словами, мой xpath должен возвращать только вторую цель SomeName2, потому что нет исключенного типа модификации.

Это самое близкое, что я смог получить, но он по-прежнему выбирает оба.

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

ответ

1

Причина ваш XPath выбирает и потому, что и действительно имеют modification элементы с @modification-type атрибут равным другим, чем de-listed значений. Используйте not() вместо != ...

Это XPath,

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

будут выбраны все элементы с targetнетmodification детей с modification-type Атрибуты равны de-listed.

+0

То, что мне нужно. Благодарю. –