2012-05-18 29 views
3

我試圖使用XSLT將純文本文件轉換爲XML文件。我從CSV文件開始,因爲這是一個衆所周知的文件格式,我可以開始使用谷歌搜索的例子。XSLT:CSV(或平面文件或純文本)到XML

我偶然發現了這個: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)並嘗試使用它。我遇到了這個錯誤:

Error on line 1 column 1 of csv.csv:

SXXP0003: Error reported by XML parser: Content is not allowed in prolog.

這似乎表明,我認爲當它開始解析文件,它擊中了第一個字符,發現這不是一個<字符,嚷着要自己「這」不是個一個XML文件!雙重紅豆杉,配偶!「並炸燬了。哪種類型的運行與此觀點相反,即此XSLT應該用於不是XML的文件(即CSV文件)。強迫你將XML中的非XML包裝到XML標籤中以使其工作完全失敗。

起初我想也許問題在於我沒有像例子那樣直接在命令行上使用Saxon jar。所以我就是這麼做的。其結果是很熟悉的東西:

Error on line 1 column 1 of csv.csv:

SXXP0003: Error reported by XML parser: Content is not allowed in prolog.

我想,也許是因爲我使用的是較新的版本,我需要回去和使用的例子原本下寫的版本。所以我回到了SaxonB 9.1.0.8,並在Eclipse和命令行中嘗試了它。謹慎猜測發生了什麼?

Error on line 1 column 1 of csv.csv:

SXXP0003: Error reported by XML parser: Content is not allowed in 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

請勿使用'-s:csv.csv'選項。 – mzjn

+0

關於命令行語法,我認爲你應該接受pgfearo的答案。如果您想了解Saxon Java API,請發佈一個新問題。 – mzjn

回答

2

我不認爲這是一個陰謀 - 你沒有包括你使用的Saxon命令行,但我懷疑你是用csv.csv作爲變換的源頭來調用變換。因爲這不是一個XML文件,所以會出現XML分析器錯誤,如您所示。

您參考的XSLT樣式表有一個名爲'main'的入口模板,在命令行上使用-it選項將'main'設置爲初始模板。使用這個集合,你現在不需要爲變換提供一個源。 Saxon命令行選項記錄在here