使用XSLT在XML中移动节点



我想问如何使用XSLT转换以下XML:

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

源XML:

<root>
    <header>
        <version>1</version>
    </header>
    <line>
        <id> 1 </id>
    </line>
    <line>
        <id> 2 </id>
    </line>
    <subline>
        <id> 1 </id>
    </subline>
    <subline>
        <id> 2 </id>
    </subline>
</root>

目标:

<root>
    <header>
        <version>1</version>
    </header>
    <line>
        <id> 1 </id>
    </line>
    <subline>
        <id> 1 </id>
    </subline>
    <line>
        <id> 2 </id>
    </line>
    <subline>
        <id> 2 </id>
    </subline>
</root>

等...

感谢您的支持

使用:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
  <xsl:template match="/root">
    <xsl:copy>
      <xsl:apply-templates select="*[not(self::line or self::subline)]"/>
      <xsl:apply-templates select="line | subline">
        <xsl:sort select="id"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新