xml的空节点

时间:2014-02-27 14:47:08

标签: xslt

输入XML

<root><table>
 <cell1>4324</cell1>
 <cell2>543</cell2>
</table>
<table1>
 <cell1>4324</cell1>
 <cell2>543</cell2>
</table1></root>

我正在尝试复制我的xml节点表,所以一切都保持不变,只应删除值。我需要输出xslt2

<root><table>
 <cell1></cell1>
 <cell2></cell2>
</table>
<table1>
 <cell1>4324</cell1>
 <cell2>543</cell2>
</table1></root>

请注意,上面的示例仅用于显示我要做的事情 - 基本上清空所有表节点值。我知道如何删除/复制具有text()的特定节点cell1,但无法弄清楚如何清空整个节点,如示例所示。

任何帮助将不胜感激:D 非常感谢, Eoglasi

1 个答案:

答案 0 :(得分:1)

使用身份转换模板复制所有内容;使用另一个模板来抑制您不想要的text()节点:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

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

<xsl:template match="table/*/text()"/>

</xsl:stylesheet>

应用于您修改后的输入:

<root>
    <table>
        <cell1>4324</cell1>
        <cell2>543</cell2>
    </table>
    <table1>
        <cell1>4324</cell1>
        <cell2>543</cell2>
    </table1>
</root>

结果是:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <table>
        <cell1/>
        <cell2/>
    </table>
    <table1>
        <cell1>4324</cell1>
        <cell2>543</cell2>
    </table1>
</root>