我正在尝试使用 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