0

私は次のXSLTを持っています。xmlをそのまま維持し、XMLの特定のセクションのみを変更する必要があるため、ID変換を使用しています。<committee committeetype="Associate">

   <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output indent="yes"/>
        <xsl:strip-space elements="*"/>

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

      <xsl:template match="committee[@committeetype='Associate']/affiliation">
            <Committee CommitteeType="Associate"> 
                <xsl:copy>  
                    <xsl:apply-templates select="node()|@*"/>   
                </xsl:copy>  
           </Committee >
      </xsl:template>

  <xsl:template match="committee[@committeeType='Associate']">
        <xsl:apply-templates/>
  </xsl:template>

</xsl:stylesheet>

変換

<committee committeetype="Associate">
    <affiliation dbid="11">
        <name>Eve </name>
    </affiliation>
    <affiliation dbid="12">
        <name>Dan </name>
    </affiliation>
    <affiliation dbid="13">
        <name>Harold </name>
    </affiliation>
    <affiliation dbid="14">
        <name>Chris </name>
    </affiliation>      
    <affiliation dbid="25">
        <name>Malcolm </name>
    </affiliation>
    <affiliation dbid="15">
        <name>Mike </name>
    </affiliation>
</committee>

の中へ

            <committee committeetype="Associate">
                <affiliation dbid="11">
                    <name>Eve </name>
                </affiliation>
            </committee>
            <committee committeetype="Associate">
                <affiliation dbid="12">
                    <name>Dan </name>
                </affiliation>
            </committee>
            <committee committeetype="Associate">
                <affiliation dbid="13">
                    <name>Harold </name>
                </affiliation>
            </committee>
            <committee committeetype="Associate">
                <affiliation dbid="14">
                    <name>Chris </name>
                </affiliation>
            </committee>
            <committee committeetype="Associate">
                <affiliation dbid="25">
                    <name>Malcolm </name>
                </affiliation>
            </committee>
            <committee committeetype="Associate">
                <affiliation dbid="15">
                    <name>Mike </name>
                </affiliation>
            </committee>

所属を4つにグループ化するようにするにはどうすればよいですか?<committee committeetype="Associate">

そのような

  <committee committeetype="Associate">
                <affiliation dbid="11">
                    <name>Eve </name>
                </affiliation>
                <affiliation dbid="12">
                    <name>Dan </name>
                </affiliation>
                <affiliation dbid="13">
                    <name>Harold </name>
                </affiliation>
                <affiliation dbid="14">
                    <name>Chris </name>
                </affiliation>
   </committee>
   <committee committeetype="Associate">
                <affiliation dbid="25">
                    <name>Malcolm </name>
                </affiliation>
               <affiliation dbid="15">
                    <name>Mike </name>
                </affiliation>
   </committeemembergroup>

前もって感謝します。

4

1 に答える 1

1

これで十分かもしれない提案があります:

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

  <xsl:param name="chunk-size" select="4"/>

  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

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

  <xsl:template match="committee[@committeetype='Associate']">
    <xsl:apply-templates select="affiliation[position() mod $chunk-size = 1]" mode="group"/>
  </xsl:template>

  <xsl:template match="committee[@committeetype='Associate']/affiliation" mode="group">
    <committee committeetype="Associate">
      <xsl:apply-templates select=". | following-sibling::affiliation[position() &lt; $chunk-size]"/>
    </committee>
  </xsl:template>


</xsl:stylesheet>

変身します

<committee committeetype="Associate">
    <affiliation dbid="11">
        <name>Eve </name>
    </affiliation>
    <affiliation dbid="12">
        <name>Dan </name>
    </affiliation>
    <affiliation dbid="13">
        <name>Harold </name>
    </affiliation>
    <affiliation dbid="14">
        <name>Chris </name>
    </affiliation>      
    <affiliation dbid="25">
        <name>Malcolm </name>
    </affiliation>
    <affiliation dbid="15">
        <name>Mike </name>
    </affiliation>
</committee>

の中へ

<committee committeetype="Associate">
   <affiliation dbid="11">
      <name>Eve </name>
   </affiliation>
   <affiliation dbid="12">
      <name>Dan </name>
   </affiliation>
   <affiliation dbid="13">
      <name>Harold </name>
   </affiliation>
   <affiliation dbid="14">
      <name>Chris </name>
   </affiliation>
</committee>
<committee committeetype="Associate">
   <affiliation dbid="25">
      <name>Malcolm </name>
   </affiliation>
   <affiliation dbid="15">
      <name>Mike </name>
   </affiliation>
</committee>

ただし、上記のスタイルシートが処理するcommittee要素以外の子要素が要素に含まれているかどうかはわかりません。affiliationさらにコードが必要な場合。

于 2012-06-04T15:50:57.870 に答える