使用XSL复制XML并省略元素/属性的值

时间:2012-09-27 13:56:40

标签: xml xslt

确定。使用XSLT复制XML文件并创建精确副本但没有任何值是否容易。基本上我只想要布局。 即

<rootnode lang="EN">
    <child1>Hello</child1>
    <child2>
        <child2_1>hello</child2_1>
    </child2>
</rootnode>

和输出

<rootnode lang="">
    <child1></child1>
    <child2>
        <child2_1></child2_1>
    </child2>
</rootnode>

1 个答案:

答案 0 :(得分:3)

身份规则的简单修改

<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="@*">
  <xsl:attribute name="{name()}" namespace="{namespace-uri()}"/>
 </xsl:template>
 <xsl:template match="text()"/>
</xsl:stylesheet>

应用于提供的XML文档

<rootnode lang="EN">
    <child1>Hello</child1>
    <child2>
        <child2_1>hello</child2_1>
    </child2>
</rootnode>

会产生想要的正确结果:

<rootnode lang="">
   <child1/>
   <child2>
      <child2_1/>
   </child2>
</rootnode>