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>

CAEであり、FOCUSがOUTでなく、STATUSがACTIVEではないため、DOMAIN値を持たないノードを削除したいと思います。

<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']"/>

しかし、それは望ましい出力を生成していません。私は何を間違っていますか?

条件の1 つが満たされたときに要素を一致させたいと考えています!=が、上記の一致パターンでは、すべて!=条件が満たされる必要があることを指定しています。

解決策:

この変換:

<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 に答える