复制源xml和其他详细信息

时间:2011-11-28 14:18:18

标签: xslt xslt-2.0

源文件

<?xml version="1.0" encoding="UTF-8"?>
<!--It will contain more data, just given few here-->
<Food>
<Menu>Item1</Menu>
</Food>

需要输出:

<?xml version="1.0" encoding="UTF-8"?>
<Detail>
<SubDetail>
<Food>
<Menu>Item1</Menu>
</Food>
</SubDetail>
</Detail>

我想在Detail和SubDetails之间添加源xml(包含200多行)。你能告诉我如何写xslt。

2 个答案:

答案 0 :(得分:0)

仅使用您提供的样本数据,您可以稍微修改身份模板以获得您正在寻找的输出。

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

  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>

  <xsl:template match="/">
    <Detail>
      <SubDetail>
        <xsl:apply-templates/>
      </SubDetail>
    </Detail>
  </xsl:template>

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

</xsl:stylesheet>

答案 1 :(得分:0)

只是说明显而易见:如果要复制所选节点及其所有内容,也可以使用<xsl:copy-of>命令而不是显式递归复制。在<Detail><SubDetail>包装元素中复制整个输入文档可以在一个模板中使用一个xsl命令完成。您的最终用例可能更复杂,但逻辑是相同的。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output indent="yes" omit-xml-declaration="no" encoding="UTF-8"/>

<xsl:template match="/">
    <Detail>
        <SubDetail>
            <xsl:copy-of select="."/>
        </SubDetail>
    </Detail>
</xsl:template>

</xsl:stylesheet>