Xml 在xsl 1.0中移动行数据
我的XML中有多行数据,如下所示-Xml 在xsl 1.0中移动行数据,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,我的XML中有多行数据,如下所示- <ROW TYPE="SPECIFICATION" ID="1"> <R1>English1</R1> </ROW> <ROW TYPE="SPECIFICATION" ID="1"> <R1>Maths1</R1> </ROW> <ROW TYPE="TOTAL" ID="1"> <R1>Code1</R1&g
<ROW TYPE="SPECIFICATION" ID="1">
<R1>English1</R1>
</ROW>
<ROW TYPE="SPECIFICATION" ID="1">
<R1>Maths1</R1>
</ROW>
<ROW TYPE="TOTAL" ID="1">
<R1>Code1</R1>
</ROW>
<ROW TYPE="SPECIFICATION" ID="2">
<R1>English2</R1>
</ROW>
<ROW TYPE="SPECIFICATION" ID="2">
<R1>Maths2</R1>
</ROW>
<ROW TYPE="TOTAL" ID="2">
<R1>Code2</R1>
</ROW>
XSLT代码适用于序列,就像for-2each循环一样。但是我需要首先移动该ID的总行。请为此建议逻辑。此转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kRowById"
match="ROW[not(@TYPE='TOTAL')]" use="@ID"/>
<xsl:template match="ROW[@TYPE='TOTAL']">
<xsl:copy-of select="."/>
<xsl:copy-of select="key('kRowById', @ID)"/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
应用于提供的XML时(包装到单个顶部元素中,形成格式良好的XML文档):
英语1
数学1
代码1
英语2
数学2
代码2
生成所需结果(其中所需元素被重新排序:
<ROW TYPE="TOTAL" ID="1">
<R1>Code1</R1>
</ROW>
<ROW TYPE="SPECIFICATION" ID="1">
<R1>English1</R1>
</ROW>
<ROW TYPE="SPECIFICATION" ID="1">
<R1>Maths1</R1>
</ROW>
<ROW TYPE="TOTAL" ID="2">
<R1>Code2</R1>
</ROW>
<ROW TYPE="SPECIFICATION" ID="2">
<R1>English2</R1>
</ROW>
<ROW TYPE="SPECIFICATION" ID="2">
<R1>Maths2</R1>
</ROW>
代码1
英语1
数学1
代码2
英语2
数学2
谢谢,您的逻辑确实以所需的方式工作。还有一件事是,如果我有不同于所描述的元素,那么当我将此逻辑应用于完整的xml时,它首先显示行数据的空元素,然后用值重复相同的行数据元素。@Kundan,请问一个新的SO问题并提供一个表示我很乐意帮助您。谢谢,但是这个问题已经解决了。我只想在这里讨论这个XML部分。我提供了两行类型的XML(规格和总数)。我可以保存更多的行类型,它可以保存任何值。因此,此代码将跳过其他行类型。请提出建议。@Kundan,请提出一个新问题并解释清楚--我不理解您的评论。我添加了一个新问题,请检查。
<t>
<ROW TYPE="SPECIFICATION" ID="1">
<R1>English1</R1>
</ROW>
<ROW TYPE="SPECIFICATION" ID="1">
<R1>Maths1</R1>
</ROW>
<ROW TYPE="TOTAL" ID="1">
<R1>Code1</R1>
</ROW>
<ROW TYPE="SPECIFICATION" ID="2">
<R1>English2</R1>
</ROW>
<ROW TYPE="SPECIFICATION" ID="2">
<R1>Maths2</R1>
</ROW>
<ROW TYPE="TOTAL" ID="2">
<R1>Code2</R1>
</ROW>
</t>
<ROW TYPE="TOTAL" ID="1">
<R1>Code1</R1>
</ROW>
<ROW TYPE="SPECIFICATION" ID="1">
<R1>English1</R1>
</ROW>
<ROW TYPE="SPECIFICATION" ID="1">
<R1>Maths1</R1>
</ROW>
<ROW TYPE="TOTAL" ID="2">
<R1>Code2</R1>
</ROW>
<ROW TYPE="SPECIFICATION" ID="2">
<R1>English2</R1>
</ROW>
<ROW TYPE="SPECIFICATION" ID="2">
<R1>Maths2</R1>
</ROW>