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
。
正是我所需要的。谢谢。 –