gpt4 book ai didi

java - 使用 Java 使用 XSLT 将 XML 转换为 CSV 时无法嵌入分隔符

转载 作者:行者123 更新时间:2023-12-02 07:05:33 25 4
gpt4 key购买 nike

我正在尝试使用 XSLT 将 XML 转换为 CSV。我在这个网站上看到了很多类似的帖子,但想提及具体的要求和我在代码中看到的问题。

这是我格式良好的 XML 文件内容。请注意,我从数据库中以字符串形式获取此 XML,因此它没有格式化。

XML 文件

<myxml ver="1.0"><name>smile</name><email>test@gmail.com</email><phone_number/><job_title>Engineer</job_title><company_name>Stack Overflow</company_name><submission-datestamp>3/14/11 8:29 PM</submission-datestamp></myxml>

这是 XSLT 文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="myxml">
<xsl:for-each select="*" >
<xsl:if test="position() != last()">
<xsl:value-of select="normalize-space(.)"/>,
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

我收到以下 CSV 格式内容:

smile,
test@gmail.com,
,
Engineer,
Stack Overflow,
3/14/11 8:29 PM

要求是:

  • 我需要先显示标题
  • 逗号分隔列表,如

    smiletest@gmail.com,EngineerStack 溢出,2011 年 3 月 14 日下午 8:29

你能帮我修复我的代码吗?问题出在 XSLT 文件中。

最佳答案

您会收到额外的回车符,因为模板内有混合内容。样式表假定逗号后面的空格很重要。您可以通过将文本放入 <xsl:text> 来防止这种情况发生。 。这告诉样式表哪些文本明确是输出的一部分,因此如果除了空白之外没有其他任何内容,则认为它是无关紧要的。

我使用xsl:apply-templates稍微修改了样式表,使其更像是“推送样式”样式表。而不是xsl:for-each ,并在每行末尾添加回车符:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text"/>

<xsl:template match="/">
<xsl:apply-templates mode="header"/>
<xsl:apply-templates />
</xsl:template>

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

<xsl:template match="myxml/*">
<xsl:value-of select="normalize-space(.)"/>
<xsl:choose>
<xsl:when test="position() = last()">
<xsl:text>&#xA;</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>,</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>

产生以下输出:

name,email,phone_number,job_title,company_name,submission-datestamp
smile,test@gmail.com,,Engineer,Stack Overflow,3/14/11 8:29 PM

关于java - 使用 Java 使用 XSLT 将 XML 转换为 CSV 时无法嵌入分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16158557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com