如果满足以下条件,我需要创建一个额外的节点:
如果不是(TYPE =' WE' AND' CH' =' true') - >创建新节点MISSING
来源:
<?xml version="1.0" encoding="UTF-8"?>
<Partner>
<NR>10</NR>
<SR>
<PF>
<TYPE>WE</TYPE>
<NR>2345</NR>
<CH>false</CH>
</PF>
<PF>
<TYPE>WE</TYPE>
<NR>111</NR>
<CH>false</CH>
</PF>
<PF>
<TYPE>RG</TYPE>
<NR>999</NR>
<CH>true</CH>
</PF>
</SR>
<SR>
...
</SR>
</Partner>
期望的输出:
<?xml version="1.0" encoding="UTF-8"?>
<Partner>
<NR>10</NR>
<SR>
<PF>
<TYPE>WE</TYPE>
<NR>2345</NR>
<CH>false</CH>
</PF>
<PF>
<TYPE>WE</TYPE>
<NR>111</NR>
<CH>false</CH>
</PF>
<PF>
<TYPE>RG</TYPE>
<NR>999</NR>
<CH>true</CH>
</PF>
<XX>MISSING</XX>
</SR>
<SR>
...
</SR>
</Partner>
我真的很难创建这个测试条件 - 我需要检查两个节点的内容:
<xsl:if test="not(./PF/TYPE = 'WE' and CH = 'true')">
我需要确保在<CH>
上下文中评估<TYPE> = 'WE'
,但我不知道如何执行此操作...
我的xslt看起来像这样:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="Partner">
<PARTNER>
<xsl:for-each select="./SR">
<SR>
...
<xsl:copy-of select= "./PF">
<xsl:if test="not(./PF/TYPE = 'WE' and CH = 'true')">
<XX>MISSING</XX>
</xsl:if>
</SR>
</xsl:for-each>
</PARTNER>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
您需要找到满足条件的PF
节点,而不是多个节点可以满足的复杂表达式。
<xsl:if test="not(./PF[TYPE = 'WE' and CH = 'true'])">
<XX>MISSING</XX>
</xsl:if>
此处,表达式./PF[cond]
找到满足条件PF
的{{1}}节点。在该节点的上下文中评估所需条件cond
。