3

我正在尝试使用 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 文件!Double yew tee eff,伙计!” 并炸毁了。哪种运行方式与此 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 问题的公认答案。这怎么可能?它不起作用!

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

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

编辑:接受 pgfearo 的回答。这个“编辑”部分的原始内容现在是它自己的问题:Java 中的撒克逊人:XSLT for CSV to XML

编辑 2:如果有人对我的 XSLT 最终看起来像什么感到好奇,那么这里会出现一个不同的问题:XSLT remove() function

4

1 回答 1

2

我不认为这是一个阴谋 - 你没有包括你使用的 Saxon 命令行,但我怀疑你是在调用 csv.csv 作为转换源的转换。因为这不是一个 XML 文件,所以您将收到一个 XML 解析器错误,如您所示。

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

于 2012-05-18T16:26:45.320 回答