1

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

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

4

1 回答 1

1
<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>
于 2012-11-24T21:48:09.820 回答