XSLT 创建 CSV 但维护来自 XML 节点的逗号
Posted
技术标签:
【中文标题】XSLT 创建 CSV 但维护来自 XML 节点的逗号【英文标题】:XSLT create CSV but maintain commas from XML node 【发布时间】:2021-11-01 05:48:43 【问题描述】:我有一个 XML 文件,我想创建一个在 MS Excel 中打开的 csv 文件。 csv 文件使用逗号作为分隔符,但其中一个 XML 节点中有逗号,Excel 正在读取这些逗号,就好像它们应该在单独的单元格中一样。因此,在我的示例中,Block 1、Block 1+、Block 5、Block 5 可导出,而不是将这些内容保存在一个单元格中,当在 Excel 中打开时,每个逗号都被视为每个逗号的一个新单元格。我尝试使用制表符来分隔 csv,但这不起作用。我也尝试将节点括在引号中。
如何使包含多个逗号的字符串仅填充一个单元格?
XML:
<dmodule>
<title>ABC DEF</title>
<applic id="UHK97000-10_UHK97000-12_UHK97000-15_UHK97000-17_UHK97000-18_UHK97000-20_UHK97000-21">
<displayText>
<simplePara>Block 1, Block 1+, Block 5, Block 5 Exportable</simplePara>
</displayText>
</applic>
<tminfo>Text that should appear in the next column
</tminfo>
</dmodule>
XSLT:
<xsl:value-of select="title"/><!-- tab char -->	<xsl:value-of select="simplePara>	<xsl:value-of select="tminfo"><!-- new line char -->
我也尝试过将逗号字符转义并用双引号括起来,但我无法让我的代码运行。
XSLT:
<xsl:variable name="keepCommas">
<xsl:for-each select="simplePara">
<xsl:text>,</xsl:text>
<xsl:value-of select="concat('"['simplePara,',']"')"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:variable>
这段代码根本没有呈现任何输出。
我仅限于 XSLT 1.0 版 Microsoft 365 - Excel
【问题讨论】:
好吧,我会创建一个包含逗号的单元格的 Excel 表格,然后将其保存/导出为 CSV 并查看结果并尝试使用 XSLT 重现该结果。另一方面,Excel 有自己的 XML 格式,因此与依赖 CSV 相比,使用 XSLT 为 Excel 生成导入数据的方法可能更复杂但也更智能。 【参考方案1】:AFAICT 你需要做的只是:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="dmodule">
<xsl:text>"</xsl:text>
<xsl:value-of select="title"/>
<xsl:text>","</xsl:text>
<xsl:value-of select="applic/displayText/simplePara"/>
<xsl:text>","</xsl:text>
<xsl:value-of select="tminfo"/>
<xsl:text>" </xsl:text>
</xsl:template>
</xsl:stylesheet>
【讨论】:
如果我只想将 simplePara 选入一个变量,然后用 select 的值调用该变量呢? 我不明白你为什么要这样做,但你可以。你到底在哪里遇到了麻烦? 我为包含额外逗号的单元格创建了一个变量。您的代码效果很好!谢谢!以上是关于XSLT 创建 CSV 但维护来自 XML 节点的逗号的主要内容,如果未能解决你的问题,请参考以下文章