XSLT:CSV(或平面文件,或纯文本)到 XML



我正在尝试使用 XSLT 将纯文本文件转换为 XML 文件。我从CSV文件开始,因为这是一种众所周知的文件格式,我可以开始谷歌搜索示例。

我偶然发现了这个:http://ajwelch.blogspot.com/2007/02/csv-to-xml-converter-in-xslt-20.html,它也指向 http://andrewjwelch.com/code/xslt/csv/csv-to-xml_v2.html。

这些链接包含所谓的XSLT(2.0(,它可以获取CSV文件并将其转换为XML文件。

。除非它实际上不起作用。

我在Maven Eclipse项目中设置了它,下载了最新的Saxon依赖项(9.4 HE(并尝试使用它。我遇到了这个错误:

csv.csv 第 1 行第 1 列上的错误:

SXXP0003:XML 解析器报告的错误:prolog 中不允许内容。

这似乎向我表明,当它开始解析文件时,它点击了第一个字符,发现它不是一个<字符,对自己大喊"这不是一个 XML 文件!双红豆杉发球,伙计!"然后炸了。哪种方式与此XSLT应该适用于非XML文件(即CSV文件(的想法背道而驰。强迫您将非 XML 包装在 XML 标记中以使其正常工作完全违背了目的。

起初我认为问题可能是我没有像示例那样直接在命令行上使用 Saxon jar。所以我就这样做了。结果是相当熟悉的:

csv.csv 第 1 行第 1 列上的错误:

SXXP0003:XML 解析器报告的错误:prolog 中不允许内容。

我想也许因为我使用的是较新的版本,我需要返回并使用最初编写示例的版本。所以我回到 SaxonB 9.1.0.8 并在 Eclipse 和命令行上尝试了它。猜猜发生了什么?

csv.csv 第 1 行第 1 列上的错误:

SXXP0003:XML 解析器报告的错误:prolog 中不允许内容。

我发现如果我将 CSV 文件的全部内容包装在一个虚拟的 xml 标签中(例如 <whatever>item1,item2,item3</whatever>(它开始几乎工作(它至少使它超过了第一个字符,并且我开始在此过程中得到不同的错误(。

那么为什么这个 XSLT 不起作用呢?为什么它发布的博客(以及附件评论部分中的所有随之而来的评论(似乎表明它确实如此?我还在 Ubuntu 帮助文档中找到了它的引用,并且作为这个 StackOverflow 问题的公认答案。这怎么可能?不行!

因此,要么整个互联网上的每个人都在一个巨大的阴谋中互相撒谎和/或他们自己,旨在激怒我,要么我只是缺少一些非常简单、不可或缺的步骤,使 Saxon 使用该 XSLT 将 CSV 文件转换为 XML 文件。

那么,有人知道它是哪个吗?

编辑:pgfearo的答案被接受。这个"编辑"部分的原始内容现在是它自己的问题:Java中的撒克逊:XSLT for CSV到XML

编辑 2:如果有人对我的 XSLT 最终的样子感到好奇,那最终会得到一个不同的问题:XSLT remove(( 函数

我不认为这是一个阴谋 - 你没有包含你使用的撒克逊命令行,但我怀疑你用 csv.csv 作为转换的来源调用转换。由于这不是 XML 文件,因此您将收到 XML 解析器错误,如您所显示的。

您引用的 XSLT 样式表有一个名为"main"的条目模板,使用命令行上的 -it 选项将"main"设置为初始模板。使用此集,现在无需为转换提供源。此处记录了 Saxon 命令行选项。

最新更新