-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 回答