XPath选择没有具有特定值的子节点的XML节点?

问题描述:

我有以下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']] 

您的XPath是选择这两个原因是因为两者的确有modification元素与@modification-type属性等于比其他de-listed值。使用not()代替!= ...

此XPath,

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

将选择所有target元素与没有modification儿童modification-type属性等于de-listed

+0

正是我所需要的。谢谢。 –