如果子级包含文本,则删除父级(在cdata中)

时间:2019-06-13 21:15:39

标签: xslt

如果子节点值包含特定文本,我想删除父节点:

<SHOP>
    <SHOPITEM>
        <NAME>TEST 1 </NAME>
        <MANUFACTURER>
            <![CDATA[Apple]]>
        </MANUFACTURER>
    </SHOPITEM>
    <SHOPITEM>
        <NAME>TEST 2 </NAME>
        <MANUFACTURER>
           <![CDATA[Samsung]]>
        </MANUFACTURER>
    </SHOPITEM>
</SHOP>

我正在使用以下XSLT代码:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="no" indent="yes" method="xml"/>
 <xsl:strip-space elements="*"/>


 <xsl:template match="node() | @*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>


 <xsl:template match="SHOPITEM[MANUFACTURER = 'Samsung']"/>

</xsl:stylesheet>

如果匹配的输入不在CDATA中,则此代码有效,但在上面的示例代码中,由于制造商位于CDATA中,因此该代码不起作用。有什么技巧可以使它起作用吗?

1 个答案:

答案 0 :(得分:0)

尝试:

<xsl:template match="SHOPITEM[normalize-space(MANUFACTURER) = 'Samsung']"/>

P.S。这与CDATA无关。输入将是相同的问题:

<SHOP>
    <SHOPITEM>
        <NAME>TEST 1 </NAME>
        <MANUFACTURER>
            Apple
        </MANUFACTURER>
    </SHOPITEM>
    <SHOPITEM>
        <NAME>TEST 2 </NAME>
        <MANUFACTURER>
           Samsung
        </MANUFACTURER>
    </SHOPITEM>
</SHOP>