对我来说,编写xslt代码以获得所需的输出对我来说是一个巨大的挑战。
这是我的XML输入..我正在测试…

<aaa id="1">
  <bbb id="2">text1</bbb>
  <ccc>text2</ccc>
  <ddd id="3">
    <eee att="4d">text3</eee>
    <fff>
      <ggg att="3d">
        <yyy>text4</yyy>
        <iii attr="jj"/>
      </ggg>
    </fff>
    <sss>
      <ttt info="Y">
        <nnn delete="N">
          <mmm>text5</mmm>
        </nnn>
      </ttt>
    </sss>
  </ddd>
</aaa>

期望输出:
<root>
  <aaa id="1"/>
  <bbb id="2">text1</bbb>
  <ccc>text2</ccc>
  <ddd id="3"/>
  <eee att="4d">text3</eee>
  <fff/>
  <ggg att="3d"/>
  <yyy>text4</yyy>
  <iii attr="jj"/>
  <sss/>
  <ttt info="Y"/>
  <nnn delete="N"/>
  <mmm>text5</mmm>
</root>

我无法编写泛化代码。我的意思是,我的代码必须能够为具有不同标记名的不同xml文件提供类似的输出。

最佳答案

像这样的?

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

10-04 18:40