0

だから私はこのXMLを持っています

<?xml version="1.0" encoding="UTF-8"?>
<school name="AMU" location="CA">
   <student name="Jonny">
      <info age="20" class="A" />
   </student>
</school>

私がやろうとしているのは、schoolとの間のテーブルのみを作成することですstudent

<?xml version="1.0" encoding="UTF-8"?>
<school name="AMU" location="CA">
   <table>
    .....
   <table />
   <student name="Jonny">
      <info age="20" class="A" />
   </student>
</school>

each-groupforとitを使用してテーブルを作成する方法を知ってconcatいます。

XSL私は取り組んでいます、

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
   <xsl:output method="xml" indent="yes" encoding="UTF-8" omit-xml-declaration="yes" />
   <xsl:template match="school">
      <xsl:element name="school">
         <xsl:attribute name="name">
            <xsl:value-of select="@name" />
         </xsl:attribute>
         <xsl:attribute name="location">
            <xsl:value-of select="@location" />
         </xsl:attribute>
         <table>
            created table
         </table>
            <xsl:copy>
               <xsl:apply-templates select="student" />
            </xsl:copy>
      </xsl:element>
   </xsl:template>
</xsl:stylesheet>

私の問題は、テーブルの下のすべてのノードをコピーして、出力 XML の と の間にテーブルがありschoolstudent他に何も変更されないことです。(テーブルは正常に動作します)

私は何をすべきか?

ありがとう。

4

1 に答える 1

0

まず、コードが不必要に冗長です。これ:

<xsl:element name="school">
         <xsl:attribute name="name">
            <xsl:value-of select="@name" />
         </xsl:attribute>
         <xsl:attribute name="location">
            <xsl:value-of select="@location" />
         </xsl:attribute>

これで置き換えることができます:

<school name="{@name}" location="{@location}">

または、必要に応じて、

<xsl:copy>
   <xsl:copy-of select="@*"/>

あなたの質問に関しては、これを置き換えることができます:

   <xsl:copy>
       <xsl:apply-templates select="student" />
   </xsl:copy>

これで:

<xsl:copy-of select="student"/>
于 2013-11-06T08:12:05.913 に答える