我正在尝试使用XSLT将纯文本文件转换为XML文件。我开始使用CSV文件,因为这是一个众所周知的文件格式,我可以开始使用Google搜索示例。
我偶然发现了这个: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。
这些链接包含可以采用CSV文件并将其转换为XML文件的XSLT(2.0)。
......除非它实际上不起作用。
我在我的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不起作用呢?为什么发布的博客(以及所附评论部分中的所有附带评论)似乎表明它确实存在?我还发现它引用了here in the Ubuntu help documentation,并作为this StackOverflow question上接受的答案。怎么可能?它不起作用!
因此,整个互联网上的每个人都是在一个旨在激怒我的巨大阴谋中互相撒谎和/或他们自己,或者有一些非常简单,不可或缺的步骤,我只是缺少让撒克逊人使用XSLT将CSV文件转换为XML文件。
那么,有谁知道它是什么?
编辑:接受了pgfearo的回答。这个“编辑”部分的原始内容现在是它自己的问题:Saxon in Java: XSLT for CSV to XML
编辑2:如果有人对我的XSLT最终看起来很好奇,那么最终会出现一个不同的问题:XSLT remove() function
答案 0 :(得分:2)
我不认为这是一个阴谋 - 你没有包括你使用的Saxon命令行,但我怀疑你是用csv.csv作为变换源调用变换。因为这不是XML文件,所以您将收到XML解析器错误,例如您已经显示的错误。
您引用的XSLT样式表有一个名为“main”的条目模板,使用命令行上的 -it 选项将“main”设置为初始模板。使用此设置,您现在无需为转换提供源。 Saxon命令行选项记录在here。