使用xslt进行转换的顺序

心灵和平

我正在研究从XML到XML的xml转换。我为新转换的XML定义了XSD。XSD对每个元素都有一些预定义的序列/顺序。如何在XML转换时从XSD出现相同的序列?

我试图按照与XSD中相同的顺序排列转换顺序,但了解到转换顺序与xslt执行顺序不同。

感谢您的回应

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

<ROOT>
 <a1>A</a1>
 <d1>D</d1>
 <b1>B</b1>
 <c1>C</c1>
</ROOT>

我根据您的建议尝试了以下

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="ROOT">
    <xsl:apply-templates select="A1,D1,C1,B1" />
</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>
马丁·霍恩(Martin Honnen)

XSLT处理输入文档并应用模板,因此您需要以产生适当输出的方式编写XSLT。您没有提供有关您拥有的输入以及如何将其映射到所需输出的任何信息,仅是拥有用于输出格式的架构。尽管XSLT 2.0知道基于模式的XSLT处理,这主要意味着验证对一个模式或一组模式的输入和/或输出,但是没有任何魔术可以确保根据模式创建输出。

因此,您将必须编写代码以确保获得所需的结果,包括您要寻找的顺序(分别是架构定义的)。

例如,如果您有输入

<foo>
  <child1>...</child1>
  <child2>...</child2>
</foo>

你想创建

<bar>
  <child2>...</child2>
  <child1>...</child1>
</bar>

然后您将模板编写foo

<xsl:template match="foo">
  <bar>
    <xsl:apply-templates>
      <xsl:sort select="position()" order="descending"/>
    </xsl:apply-templates>
  </bar>
</xsl:template>

或者例如

<xsl:template match="foo">
  <bar>
    <xsl:apply-templates select="child2, child1"/>
  </bar>
</xsl:template>

至于您在编辑中提供的具体示例,您已经差不多了,并做了一些改进

<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,D1,C1,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>

和一个像Saxon 9这样的XSLT 2.0处理器,我得到了

<ROOT>
   <a1>A</a1>
   <d1>D</d1>
   <c1>C</c1>
   <b1>B</b1>
</ROOT>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用xslt sort对给定的顺序进行排序

来自分类Dev

使用xslt sort对给定的顺序进行排序

来自分类Dev

使用XSLT 1进行XML转换

来自分类Dev

使用平面文件进行XSLT转换

来自分类Dev

使用XSLT 3.0按字母顺序对KML地标进行排序

来自分类Dev

如何取消对HTML的转义,然后使用XSLT对其进行转换?

来自分类Dev

使用模板进行XSLT转换:删除空的xmlns =“”

来自分类Dev

使用jaxb进行XSLT处理以实现较小的转换性能

来自分类Dev

使用Delphi XE8进行XSLT转换的替代方法

来自分类Dev

如何使用 Saxon/C PHP-API 进行 xslt 转换

来自分类Dev

使用xslt更改json的顺序

来自分类Dev

如何使用XSLT 2按照XSD xshema文件中给定的顺序对元素进行排序:执行排序

来自分类Dev

使用XSLT进行递归

来自分类Dev

使用XSLT使用不同的内部节点但使用相同的外部节点进行XML到XML的转换

来自分类Dev

以特定表顺序从 XML 进行 XLS 转换

来自分类Dev

XSLT转换以对相似标签进行分组

来自分类Dev

使用没有Unicode字节顺序标记的iconv进行字符转换

来自分类Dev

使用没有Unicode字节顺序标记的iconv进行字符转换

来自分类Dev

使用XSLT进行XML转换以生成具有重复行的文本文件

来自分类Dev

使用scala在saxonica 9 EE上进行模式感知的XSLT转换

来自分类Dev

使用XSLT进行XML转换以生成具有重复行的文本文件

来自分类Dev

使用scala在saxonica 9 EE上进行模式感知的XSLT转换

来自分类Dev

使用XSLT转换嵌套的XML

来自分类Dev

使用XSLT转换动态XML

来自分类Dev

使用 XSLT 逻辑的 XML 转换

来自分类Dev

使用 XSLT 转换 XML 数据

来自分类Dev

使用XSLT进行条件打印

来自分类Dev

如何使用XSLT转换已转换的XML

来自分类Dev

如何使用XSLT转换已转换的XML

Related 相关文章

热门标签

归档