XSLT删除与属性值不匹配的节点

时间:2012-11-24 20:47:13

标签: xslt-1.0

如果某些属性值不匹配,我试图从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>

但它没有产生所需的输出。我做错了什么?

1 个答案:

答案 0 :(得分:1)

<xsl:template match="SM_CONFIG_ITEM [@DOMAIN !='CAE' and @FOCUS !='OUT' and @STATUS != 'INACTIVE']"/>
     

但它没有产生所需的输出。我做错了什么?

您希望在满足!=条件的一个时匹配该元素 - 但上述匹配模式指定{{>所有的{{必须满足条件。

<强>解决方案

此转化

!=

应用于提供的XML文档时:

<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>

生成想要的正确结果

<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>
相关问题