如果某些属性值不匹配,我将尝试从xml中删除节点。这是我的XML:
<CONFIGURATIONS>
<CONFIG1 DOMAIN="CAE" FOCUS="IN" STATUS="ACTIVE" >
<ATTR>1<ATTR>
</CONFIG1>
<CONFIG1 DOMAIN="CAE" FOCUS="OUT" STATUS="INACTIVE" >
<ATTR>2<ATTR>
</CONFIG1>
<CONFIG1 DOMAIN="CAE" FOCUS="OUT" STATUS="ACTIVE" >
<ATTR>2<ATTR>
</CONFIG1>
<CONFIG1 DOMAIN="MFG" FOCUS="OUT" STATUS="ACTIVE" >
<ATTR>3<ATTR>
</CONFIG1>
</CONFIGURATIONS>
我想删除没有DOMAIN值的节点,因为CAE和FOCUS不是OUT和STATUS不是ACTIVE。
<CONFIGURATIONS>
<CONFIG1 DOMAIN="CAE" FOCUS="OUT" STATUS="ACTIVE" >
<ATTR>2<ATTR>
</CONFIG1>
我正在使用以下xslt:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="SM_CONFIG_ITEM [@DOMAIN !='CAE' and @FOCUS !='OUT' and @STATUS != 'INACTIVE']"/>
</xsl:stylesheet>
但它并没有产生预期的产出。我做错了什么?
<xsl:template match="SM_CONFIG_ITEM [@DOMAIN !='CAE' and @FOCUS !='OUT' and @STATUS != 'INACTIVE']"/>
但它并没有产生预期的产出。我做错了什么?
当满足一个!=
条件时,您希望元素匹配,但上述匹配模式指定必须满足所有的!=
条件。
解决方案:
此转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"CONFIG1[not(@DOMAIN='CAE' and @FOCUS='OUT' and @STATUS='ACTIVE')]"/>
</xsl:stylesheet>
应用于所提供的XML文档时:
<CONFIGURATIONS>
<CONFIG1 DOMAIN="CAE" FOCUS="IN" STATUS="ACTIVE" >
<ATTR>1</ATTR>
</CONFIG1>
<CONFIG1 DOMAIN="CAE" FOCUS="OUT" STATUS="INACTIVE" >
<ATTR>2</ATTR>
</CONFIG1>
<CONFIG1 DOMAIN="CAE" FOCUS="OUT" STATUS="ACTIVE" >
<ATTR>2</ATTR>
</CONFIG1>
<CONFIG1 DOMAIN="MFG" FOCUS="OUT" STATUS="ACTIVE" >
<ATTR>3</ATTR>
</CONFIG1>
</CONFIGURATIONS>
生成所需的正确结果:
<CONFIGURATIONS>
<CONFIG1 DOMAIN="CAE" FOCUS="OUT" STATUS="ACTIVE">
<ATTR>2</ATTR>
</CONFIG1>
</CONFIGURATIONS>