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

これらのリンクには、CSVファイルを取得してXMLファイルに変換できるXSLT(2.0)が含まれていると思われます。

...実際には機能しないことを除いて。

Maven Eclipseプロジェクトでセットアップし、最新のSaxon依存関係(9.4 HE)をダウンロードして、使用してみました。私はこのエラーに遭遇しました:

csv.csvの1行目1列目のエラー:

SXXP0003:XMLパーサーによって報告されたエラー:コンテンツはプロローグで許可されていません。

これは、ファイルの解析を開始したときに、最初の文字にヒットし、それが文字ではないことを検出し、<「これはXMLファイルではありません!Double-yew tee eff、mate!」と叫んだことを示しているようです。そして爆破した。このXSLTがXMLではないファイル(つまり、代わりにCSVファイル)で動作することになっているという考えに反して、どの種類の実行が行われます。非XMLをXMLタグでラップして機能させるように強制すると、目的が完全に無効になります。

最初は、例のようにコマンドラインで直接Saxonjarを使用していなかったことが問題だと思いました。だから私はまさにそれをしました。結果は非常に馴染み深いものでした。

csv.csvの1行目1列目のエラー:

SXXP0003:XMLパーサーによって報告されたエラー:コンテンツはプロローグで許可されていません。

おそらく新しいバージョンを使用していたので、元の例が作成されたバージョンに戻って使用する必要があると思いました。そこで、SaxonB 9.1.0.8に戻り、Eclipseとコマンドラインの両方で試してみました。何が起こったのか推測してみてください。

csv.csvの1行目1列目のエラー:

SXXP0003:XMLパーサーによって報告されたエラー:コンテンツはプロローグで許可されていません。

CSVファイルの内容全体をダミーのxmlタグでラップすると(たとえば<whatever>item1,item2,item3</whatever>)、ほぼ機能し始めることがわかりました(少なくとも最初の文字を超えて、プロセスの途中で別のエラーが発生し始めます) 。

では、なぜこのXSLTが機能しないのでしょうか。投稿されたブログ(および添付のコメントセクションのすべての付随するコメント)が、ブログがそうであることを示しているように見えるのはなぜですか?また、Ubuntuのヘルプドキュメントで、このStackOverflowの質問で受け入れられた回答として参照されていることもわかりました。そんなことがあるものか?動作しません!

したがって、インターネット全体のすべての人がお互いに嘘をついている、および/または私を怒らせるように設計された巨大な陰謀に身を置いているか、SaxonにそのXSLTを使用して変換するために必要な非常に単純で不可欠なステップがありますCSVファイルをXMLファイルに変換します。

それで、誰かがそれがどれであるか知っていますか?

編集: pgfearoの回答が受け入れられました。この「編集」セクションの元の内容は、ここで独自の質問になりました。JavaのSaxon:CSVからXMLへのXSLT

編集2:私のXSLTがどのように見えるかについて誰かが興味を持っている場合、それはここで別の質問になりました:XSLT remove()関数

4

1 に答える 1

2

陰謀ではないと思います。使用したSaxonコマンドラインは含まれていませんが、変換のソースとしてcsv.csvを使用して変換を呼び出していると思われます。これはXMLファイルではないため、表示したようなXMLパーサーエラーが発生します。

参照するXSLTスタイルシートには「main」というエントリテンプレートがあります。コマンドラインで-itオプションを使用して、「main」を初期テンプレートとして設定します。このセットを使用すると、変換のソースを提供する必要がなくなります。Saxonコマンドラインオプションはここに記載されています。

于 2012-05-18T16:26:45.320 に答える