我需要一些帮助来根据另一个xml对xml元素进行排序。我的主要xml如下
<xml>
<A1>value</A1>
<A2>value</A2>
<B1>value</B1>
<B2>value</B2>
</xml>
我想要另一个看起来像这个的xml
<xml>
<A1>value</A1>
<B1>value</B1>
<A2>value</A2>
<B2>value</B2>
</xml>
sorign不基于任何键或任何值。顺序是动态确定的(通过从DB中读取顺序),并且必须将主xml转换为该顺序。from db值类似
tagname | order
------------
A1 | 1
B1 | 2
A2 | 3
A3 | 4
我该怎么做?我可以动态地形成xslt。但是xslt应该是什么?
提前谢谢。
怎么样。。。
<xsl:transform
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:variable name="elem-order" as="element(elem)*">
<elem name="A1" />
<elem name="B1" />
<elem name="A2" />
<elem name="B2" />
</xsl:variable>
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates select="@*|comment()|processing-instruction()|text()" />
<xsl:apply-templates select="*">
<xsl:sort select="index-of( $elem-order, $elem-order[@name eq local-name( current())])" data-type="number" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:transform>
如果元素顺序来自外部文件,请重新定义$elem顺序变量,如下所示。。。
<xsl:variable
name="elem-order"
select="doc('what-ever-uri')/elements/elem" />
或者将其作为样式表参数传入。