【发布时间】:2016-03-01 13:41:32
【问题描述】:
我是 XSLT 的新手,一直在努力解决以下问题。如果有人可以帮助我解决这个问题,我将不胜感激。
这是我的 XML 文件,但元素名称每次都可能不同。 XML 是在运行时创建的。基本上我不知道 XML 文件中的所有元素。可能有或多或少的元素,但基本上具有以下结构:
<University>
<language>en</language>
<name>Medi University</name>
<location>Rome</location>
<country>Italy</country>
<member>
<teacher>
<name>John Sting</name>
<joined>
<time>
<start/>
<end/>
</time>
<valid>true</valid>
</joined>
<name>Paul Ironman</name>
<joined>
<time>
<start/>
<end/>
</time>
<valid>true</valid>
</joined>
</teacher>
<teacherAssistant>
<name>Luna Tutti</name>
<joined>
<time>
<start>1.9.2015</start>
<end></end>
</time>
<valid>true</valid>
</joined>
</teacherAssistant>
</member>
<telephone>7538476398754</telephone>
<email>medi@medi.com</email>
</University>
我有一个试图转换它的 XSLT 文件。正如我所说,XML 文件是在运行时创建的,我不知道 XML 内容。
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*">
<xsl:value-of select="name()"/>
<xsl:value-of select="text()"/>
<xsl:if test="*">
<xsl:apply-templates/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
上面的代码像这样打印 CSV 文件:
elemenNameelementValue
elemenName2elementValue2
elemenName3elementValue3
等等。
我想要的是像下面这样的:
University
language, name, location, country,telephone, email
english, Medi, Rome,Italy,7538476398754,medi@medi.com
Teacter
name, joined, time, start,end,valid,
John Sting, , , , ,true
Paul Ironman, , , , , true
Teacher Assistant
name, joined, time, start,end,valid,
Luna Tutti, , ,1.9.2015, , true
我希望相关元素像上面一样出现在一行上。
谢谢
【问题讨论】:
-
不可能编写适合任何 XML 输入的通用XSLT 样式表。如果您想产生有意义的结果,您必须提供一些约束。在您的示例中,您为
teacher创建了一个新“表”,但不是为joined。真正通用的样式表无法区分。