【问题标题】:Converting xml to CSV using XSLT使用 XSLT 将 xml 转换为 CSV
【发布时间】:2011-10-28 00:30:00
【问题描述】:

我是 XSLT 的新手,并且已经阅读了一些关于 SO 的早期线程 Thread i Followed

我的要求类似,我需要将 XML 转换为 CSV,例如我有以下 XML

<?xml version="1.0" encoding="UTF-8"?>
<impex>
<record>
<Employee/>
<UID>aa</UID>
<Name>HR Manager</Name>
<Groups/>
<Password>123456</Password>
</record>
<record>
<Employee/>
<UID>bb</UID>
<Name>HR Executive</Name>
<Groups/>
<Password>123456</Password>
</record>
</impex>

我需要将此 XML 转换为以下 csv 输出

INSERT_UPDATE Employee;UID[unique=true];name;groups(uid);password
;"aa";"HR Manager";;"123456"
 ;"bb";"HR Executive";;"123456"

我必须动态管理 csv 标头(基于 xml 元素)

此外,如果缺少某些值,我还必须小心,我可以提供它们 例如 在这种情况下丢失或为空,我需要为生成的 csv 提供一些默认值,因为此 csv 将是最终输出,将导入系统

我将不胜感激任何可以帮助我前进的开始

【问题讨论】:

  • 我对 xslt 不熟悉,所以我很惊讶如何创建标题,因为到目前为止我所看到的是没有标题只有值
  • 我建议您开始阅读 W3CSchools XSLT 教程。他们非常好,你可能会在一个小时内学会解决你的问题w3.org/TR/xslt
  • 肯定会这样做..但任何帮助也将不胜感激,我知道我要求很多,但这阻碍了我的工作:)
  • 你为什么让你的读者感到困惑?我在提供的 XML 文档和想要的结果之间没有看到任何共同点!
  • 那个XML结构看起来只能有一条记录;真的吗?如果不是,它如何包含多个记录?

标签: xml xslt csv


【解决方案1】:

不是最漂亮的,但很管用

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text" />

<xsl:template match="/impex">
    <xsl:text>INSERT_UPDATE </xsl:text>
    <xsl:apply-templates select="record[1]/*" mode="header"/>
    <xsl:apply-templates select="record" />
</xsl:template>


<xsl:template match="*" mode="header" >
    <xsl:value-of select="name()"/>
    <xsl:choose>
        <xsl:when test="position()=last()">
            <xsl:text>&#10;</xsl:text>
        </xsl:when>
        <xsl:otherwise>;</xsl:otherwise>
    </xsl:choose>
</xsl:template>

<xsl:template match="record">
    <xsl:apply-templates select="*"/>
</xsl:template>

<xsl:template match="*" >
    <xsl:value-of select="."/>
    <xsl:choose>
        <xsl:when test="position()=last()">
            <xsl:text>&#10;</xsl:text>
        </xsl:when>
        <xsl:otherwise>;</xsl:otherwise>
    </xsl:choose>
</xsl:template>
</xsl:stylesheet>

【讨论】:

  • 感谢 Per 的这一点。虽然我自己也必须学习 xslt,而且我正在这样做,但它可以帮助我入门
猜你喜欢
  • 2019-02-02
  • 2017-05-23
  • 2013-05-22
相关资源
最近更新 更多