转换特定的顺序

时间:2014-04-28 18:13:31

标签: xslt-1.0

我想知道可以在元素树中向上或向下移动xml元素。

输入xml。

<ROOT>
 <A1>A</A1>
 <B1>B</B1>
 <C1>C</C1>
 <D1>D</D1>
</ROOT>

所需的输出xml。

<ROOT>
 <A1>A</A1>
 <D1>D</D1>
 <B1>B</B1>
 <C1>C</C1>
</ROOT>

XSD序列规则

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"      xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="ROOT">
 <xs:complexType>
  <xs:sequence>
    <xs:element type="xs:string" name="A1"/>
    <xs:element type="xs:string" name="D1"/>
    <xs:element type="xs:string" name="B1"/>
    <xs:element type="xs:string" name="C1"/>
  </xs:sequence>
  </xs:complexType>
  </xs:element>
  </xs:schema>

任何人都可以提供一些XSLT示例来做这件事吗?感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:0)

Martin Honnen帮助我从其他帖子中得到答案,因此只是想分享答案以帮助其他人,但我仍然想知道是否还有其他方法可以做到这一点 - 就像在这种方法中,如果XSD标签序列有变化一个人也必须改变xsl序列。

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

<xsl:output indent="yes"/>

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

<xsl:template match="ROOT">
<ROOT>
<xsl:apply-templates select="A1"/>
<xsl:apply-templates select="D1"/>
<xsl:apply-templates select="C1"/>
<xsl:apply-templates select="B1"/>
</ROOT>
</xsl:template> 

<xsl:template match="A1">
<a1>
    <xsl:apply-templates />
</a1>
</xsl:template>

 <xsl:template match="B1">
<b1>
    <xsl:apply-templates />
</b1>
</xsl:template>

 <xsl:template match="C1">
<c1>
    <xsl:apply-templates />
</c1>
</xsl:template>

<xsl:template match="D1">
<d1>
    <xsl:apply-templates />
</d1>
</xsl:template>

 </xsl:stylesheet>