在 xsl 1.0 中移动行数据 [英] Shifting row data in xsl 1.0
问题描述
我的 XML 中有多个 Rows 数据,就像这样 -
I have multiple Rows data in my XML like this -
<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>
我希望我的输出显示在图像中,就像这个 ROW 数据在 for-each 循环中工作一样.并且要求是应该首先显示 ROW TYPE="TOTAL" ID="1" 然后它的 ROW TYPE="SPECIFICATION" 数据.再次循环进一步,应首先显示 ROW TYPE="TOTAL" ID="2",然后显示其 ROW TYPE="SPECIFICATION" 数据.
I want my Output to be displayed in Image like that this ROW data works in a for-each loop. And the requirement is that ROW TYPE="TOTAL" ID="1" should be displayed first then its ROW TYPE="SPECIFICATION" data. Moving further in loop again, ROW TYPE="TOTAL" ID="2" should be displayed first then its ROW TYPE="SPECIFICATION" data.
基本上应该是这样的 -
Basically it should come like this -
Code1
English1
Maths1
Code2
English2
Maths2
XSLT 代码适用于序列,就像 for-2each 循环一样.但是我需要先为该 ID 移动 TOTAL 行.请为此提出逻辑建议.
The XSLT code works for sequence as for-2each loop works. But I need to shift the TOTAL row first for that ID. Please suggest logic for this.
推荐答案
这种转变:
<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 文档):
when applied on the provided XML (wrapped into a single top element to be made a well-formed XML document):
<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>
产生想要的结果(其中想要的元素被重新排序:
produces the wanted result (in which the wanted elements are re-ordered:
<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>
这篇关于在 xsl 1.0 中移动行数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!