如果某些属性值不匹配,我会尝试从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>
我想删除不具有作为CAE的域值的节点,并且焦点不是OUT,状态是not 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>
但它没有产生所需的输出。我做错了什么?
发布于 2012-11-25 05:48:10
但它没有产生所需的输出。我做错了什么?
您希望在满足其中一个!=
条件时匹配元素--但是上面的匹配模式指定必须满足所有!=
条件。
解决方案
此转换
<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>
https://stackoverflow.com/questions/13545430
复制相似问题