3

我是 XSLT 的新手。我想使用 XSLT 为现有子节点添加父节点。我的 XML 文件如下所示

转换前

  <Library>
        .
        .//There is more nodes here
        .
        <CD>
            <Title> adgasdg ag</Title>
            .
            .//There is more nodes here
            .
        </CD>
         .
        .//There is more nodes here
        .
        <CLASS1>
         <CD>
            <Title> adgasdg ag</Title>
            .
            .//There is more nodes here
            .
        </CD>
        </CLASS1>
        </Library>

转换后

  <Library>
  <Catalog>
    <CD>
      <Title> adgasdg ag</Title>
    </CD>
  </Catalog>
  <Class1>
    <Catalog>
      <CD>
        <Title> adgasdg ag</Title>
      </CD>
    </Catalog>
  </Class1>
</Library>
4

2 回答 2

4

要添加元素Catalog,您可以使用:

<?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"/>

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

    <xsl:template match="CD">
        <Catalog>
            <xsl:copy>
                <xsl:apply-templates select="@*|node()" />
            </xsl:copy>
        </Catalog>
    </xsl:template>
</xsl:stylesheet>
于 2013-09-30T19:47:35.770 回答
3

我通常会完全按照@markdark 的建议去做(覆盖身份转换),但如果你不需要修改除了添加之外的任何东西Catalog,你也可以这样做......

XSLT 2.0(也可用作 1.0)

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>

    <xsl:template match="/*">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <Catalog>
                <xsl:copy-of select="node()"/>
            </Catalog>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>
于 2013-09-30T20:49:49.263 回答