我有一个看起来像这样的文件:
<test>
<testOne>
<testTwo>AAA</testTwo>
<testOne>
<testOne>
<testTwo>BBB</testTwo>
<testOne>
<testOne>
<testTwo>CCC</testTwo>
<testOne>
<testOne>
<testTwo>DDD</testTwo>
<testOne>
<testOne>
<testTwo>EEE</testTwo>
<testOne>
</test>
现在在xsl中通过执行以下操作很容易获得此节点集:
<xsl:variable name="testOnes" select="//test/testOne">
但是我遇到的问题是我必须遇到形成节点集的条件,例如
if testOne[testTwo='AAA'] exists select all nodes except those of form testOne[testTwo='BBB']
and if testOne[testTwo='CCC'] exists then select all nodes except those of form testOne[testTwo='DDD']
因此,例如根据上述规则,我们应该从任何特定的xpath获得此结果:
<test>
<testOne>
<testTwo>AAA</testTwo>
<testOne>
<testOne>
<testTwo>CCC</testTwo>
<testOne>
<testOne>
<testTwo>EEE</testTwo>
<testOne>
</test>
有没有办法用if语句编写一个xpath,可以实现这个或一些xsl代码,可以检查节点集内容,如果找到另一个节点就删除它?
答案 0 :(得分:1)
如果testOne [testTwo =&#39; AAA&#39;]存在,请选择除表格之外的所有节点 testOne [testTwo =&#39; BBB&#39;]
这种情况可以重新说明如下:
选择满足以下任何一项的所有testTwo节点:
1.他们的价值不是BBB&#39;
他们没有一个表兄弟&#34; testTwo节点的值为&#39; AAA&#39;
或者,在另一个表述中:
选择既不满足的所有testTwo节点:
1.他们的价值是BBB&#39;
他们有一个表兄弟&#34; testTwo节点的值为&#39; AAA&#39;
在XPath中可以写成:
//testTwo[not(.='BBB' and ../../testOne/testTwo='AAA')]
以下列形式添加另一个谓词:
//testTwo[not(.='BBB' and ../../testOne/testTwo='AAA')]
[not(.='DDD' and ../../testOne/testTwo='CCC')]
生成一个表达式,在您的示例中将选择:
<testTwo>AAA</testTwo>
<testTwo>CCC</testTwo>
<testTwo>EEE</testTwo>