我是XSLT的新手。我正在尝试使用XSLT将XML转换为CSV。我已经查看了各种可用的在线示例,并试图自己解决这个问题但是我一直在努力获得理想的结果。任何帮助,将不胜感激。
现在的问题陈述。 我有以下XML,我想转换为CSV。这里的问题是我只想从选择节点及其子节点复制数据,而忽略其余的节点。
<Employees>
<Employee>
<WorkInfo>
<Skill>Java</Skill>
<Experience>10</Experience>
<PreviousCompany>XYZ</PreviousCompany>
</workInfo>
<PersonalInfo>
<Name>John</Name>
<LastName> Trevor</LastName>
<Age>35</Age>
</PersonalInfo>
</Employee>
</Employees>
我想在节点 WorkInfo 及其子节点下打印数据,而不打印 PersonalInfo 及其子节点。
我正在使用下面的xslt
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates select="workInfo"/>
<xsl:apply-templates select="PersonalInfo"/>
</xsl:template>
<xsl:template match="workInfo">
<xsl:copy-of select="."/>
<xsl:if test="not(position()=last())">,</xsl:if>
</xsl:template>
<xsl:template match="PersonalInfo">
</xsl:stylesheet>
但是我没有得到预期的输出,这是
Java,10,XYZ
但最终得到一个空洞的结果。请有人帮我理解我哪里出错了。
谢谢, LTL
答案 0 :(得分:0)
请修改XSL模板,如下所示。您需要循环遍历WorkInfo
的所有子元素,并使用<xsl:value-of>
输出其值。
<xsl:template match="Employee">
<xsl:for-each select="WorkInfo/*">
<xsl:value-of select="." />
<xsl:if test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
输出
Java,10,XYZ