我有以下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']]
答案 0 :(得分:1)
XPath选择这两者的原因是因为两者都有modification
个元素,@modification-type
属性等于de-listed
以外的值。使用not()
代替!=
...
这个XPath,
//target[not(modification[@modification-type = 'de-listed'])]
将选择所有target
元素与没有 modification
子级modification-type
属性等于de-listed
的孩子。