2

このように 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>
</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 ループで機能するように、出力を Image に表示したいと考えています。そして要件は、ROW TYPE="TOTAL" ID="1" を最初に表示し、次にその ROW TYPE="SPECIFICATION" データを表示することです。再びループをさらに進めると、ROW TYPE="TOTAL" ID="2" が最初に表示され、次にその ROW TYPE="SPECIFICATION" データが表示されます。

基本的にはこのようになるはずです-

Code1
  English1
  Maths1
Code2
  English2
  Maths2

for-2each ループが機能するように、XSLT コードはシーケンスに対して機能します。しかし、その ID の TOTAL 行を最初にシフトする必要があります。これの論理を提案してください。

4

1 に答える 1

2

この変換:

<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 ドキュメントを作成するために単一のトップ要素にラップされます):

<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>
于 2013-03-21T04:25:21.383 に答える