0

こんにちは、次のような xml ドキュメントがあります。

<a> <!-- Several nodes "a" with the same structure for children -->
    <b>12</b>
    <c>12</c>
    <d>12</d>
    <e>12</e>
    <f>12</f>
    <g>12</g>
</a>

xslt 2.0 を使用して次のドキュメントを取得しようとしています。

<a>
    <b>12</b>
    <c>12</c>
    <wrap>
        <d>12</d>        
        <e>12</e>
        <f>12</f>
        <g>12</g>
    </wrap>
</a>

私はxslファイルを

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>

そして、文字列部分の置換、いくつかのノードのフィルタリングなど、いくつかのケースでそれを変更しました。

4

2 に答える 2

1

XSLT 2.0 では、次のものも利用できますfor-each-group group-adjacent

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output indent="yes"/>

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="a">
      <xsl:copy>
        <xsl:for-each-group select="*" group-adjacent="boolean(self::d | self::e | self::f | self::g)">
          <xsl:choose>
            <xsl:when test="current-grouping-key()">
              <wrap>
                <xsl:apply-templates select="current-group()"/>
              </wrap>
            </xsl:when>
            <xsl:otherwise>
              <xsl:apply-templates select="current-group()"/>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:for-each-group>
      </xsl:copy>
    </xsl:template>

    </xsl:stylesheet>
于 2013-05-24T10:15:46.467 に答える