【问题标题】:transformation in particular sequence特定顺序的变换
【发布时间】:2014-04-28 18:13:30
【问题描述】:

我想知道是否可以在元素树中向上或向下移动 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 示例来做这样的事情?提前感谢您的帮助。

【问题讨论】:

  • 节点顺序在 XML 中通常无关紧要。如果是这样,你可能做错了什么。你的模式说什么?另外,您的问题未详细说明。确定所需顺序的确切规则是什么?
  • 感谢您的回复。实际上,我有 XSD,它具有元素序列,因此转换后的 XML 失败,这就是我希望以特定顺序输出 XML 的原因。
  • 更新和说明应编辑到原始帖子中,以匹配 SO 的问答格式。评论不用于讨论。请添加一个示例 XSD 以显示同级顺序的必要性以及顺序是什么。
  • Hello Outis,添加了序列规则。
  • 这个问题与您的其他问题stackoverflow.com/questions/23343204/… 有什么关系?它们听起来确实很相似。

标签: xslt-1.0


【解决方案1】:

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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多