-1

例えば

<SCHOOL>
    <STUDENT NAME="BOB">
        <GRADE SCORE="50"/>
        <GRADE SCORE="10"/>
        <GRADE SCORE="20"/>
        <GRADE SCORE="40"/>
        <GRADE SCORE="90"/>
        <GRADE SCORE="30"/>
    </STUDENT>
</SCHOOL>

に変換

<SCHOOL>
    <STUDENT NAME="BOB">
        <GRADE SCORE="50"/>
        <GRADE SCORE="10"/>
        <GRADE SCORE="20"/>
    </STUDENT>
    <STUDENT NAME="BOB">
        <GRADE SCORE="40"/>
        <GRADE SCORE="90"/>
        <GRADE SCORE="30"/>
    </STUDENT>
</SCHOOL>

xslt を使い始めたばかりで、これを達成する方法がわかりません!

4

1 に答える 1

1

この変換は、あなたが求めることを行います。怠惰すぎて自分で宿題をする以外に、質問する正当な理由があると思いますか?

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

  <xsl:strip-space elements="*"/>
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

  <xsl:template match="/SCHOOL">
    <xsl:copy>
      <xsl:apply-templates select="STUDENT"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="STUDENT">
    <xsl:apply-templates select="GRADE[position() mod 3 = 1]"/>
  </xsl:template>

  <xsl:template match="GRADE">
    <STUDENT>
      <xsl:copy-of select="parent::STUDENT/@*"/>
      <xsl:copy-of select=".|following-sibling::*[position() &lt; 3]"/>
    </STUDENT>
  </xsl:template>

</xsl:stylesheet>

出力

<SCHOOL>
   <STUDENT NAME="BOB">
      <GRADE SCORE="50"/>
      <GRADE SCORE="10"/>
      <GRADE SCORE="20"/>
   </STUDENT>
   <STUDENT NAME="BOB">
      <GRADE SCORE="40"/>
      <GRADE SCORE="90"/>
      <GRADE SCORE="30"/>
   </STUDENT>
</SCHOOL>
于 2013-06-07T19:26:59.290 に答える