在节点之间插入表

时间:2013-11-06 05:22:19

标签: xml xslt xslt-2.0

所以我有这个XML

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

我要做的是仅在schoolstudent之间创建表格,

<?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-groupconcat来创建表格。

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之间的表格而没有其他更改。 (表工作正常)

我该怎么办?

感谢。

1 个答案:

答案 0 :(得分: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"/>