所以我有这个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-group
和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就会有school
和student
之间的表格而没有其他更改。 (表工作正常)
我该怎么办?
感谢。
答案 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"/>