1

このサイトのすべての良いヒントがあっても、xsltに問題があります。私はそれにかなり慣れていません。私はこのソースファイルを持っています:

<?xml version="1.0" encoding="utf-8"?>
<file>
  <id>1</id>
  <row type="A">
    <name>ABC</name>
  </row>
  <row type="B">
    <name>BCA</name>
  </row>
  <row type="A">
    <name>CBA</name>
  </row>
</file>

この結果を得るために、要素を追加し、タイプで行を並べ替えたい

<file>
  <id>1</id>
  <details>
  <row type="A">
    <name>ABC</name>
  </row>
    <row type="A">
      <name>CBA</name>
    </row>
  <row type="B">
    <name>BCA</name>
  </row>
  </details>
</file>

これを使用して行を並べ替えることができます:

  <xsl:template match="file">
    <xsl:copy>
      <xsl:apply-templates select="@*/row"/>
      <xsl:apply-templates>
        <xsl:sort select="@type" data-type="text"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

これを使って行を動かすことができます

 <xsl:template match="file">
    <xsl:copy>
      <xsl:copy-of select="@*" />
      <xsl:apply-templates select="*[not(name(.)='row')]" />
      <details>
        <xsl:apply-templates select="row"  />
      </details>
    </xsl:copy>
  </xsl:template>

しかし、それらを組み合わせようとすると、正しい答えを出すことができません。物事がどのように組み合わされているかを見ると、XSLTについてもっと理解できれば幸いです。新しい要素を作成しているので、新しい要素を作成する<details>前に並べ替えを行う必要があると思います<details>。xslt1.0を使用する必要があります。

4

1 に答える 1

0

このようなものがうまくいくようです:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

  <xsl:template match="file">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:copy-of select="row[1]/preceding-sibling::*" />
      <details>
        <xsl:for-each select="row">
          <xsl:sort select="@type" data-type="text"/>
          <xsl:copy-of select="."/>
        </xsl:for-each>
      </details>
      <xsl:copy-of select="row[last()]/following-sibling::*" />
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

これが私が得た結果です:

<?xml version="1.0" encoding="utf-8"?>
<file>
  <id>1</id>
  <details>
    <row type="A">
      <name>ABC</name>
    </row>
    <row type="A">
      <name>CBA</name>
    </row>
    <row type="B">
      <name>BCA</name>
    </row>
  </details>
</file>
于 2012-09-17T17:47:26.067 に答える