1

この XML ファイルには、昨年のすべてのアーカイブされたニュース記事が含まれていました。これらのストーリーをストーリー カテゴリ [y|ies] ごとに並べ替えて、新しい XML ファイルにするように依頼されました。

big_story_export.xml

になる

lifestyles.xml
food.xml
nascar.xml

...等々。

1 回限りの python スクリプトを使用して作業を完了しました最初は XSLT を使用してこれを試みました。私のXPATHの選択がベッドを台無しにしていたので、これはフラストレーションをもたらしました。テスト ファイルは完全に変換されましたが、大きなファイルをスタイル シートに当てはめた結果、結果は ...何もありませんでした。

このようなファイルが XSLT を介して確実に実行されるようにするために、どのような戦略をお勧めしますか? これはベンダーから渡されたものなので、このファイルの構造を定義することに関しては、あまり力がないと想像してください。

コードサンプルが必要な場合は、いくつかまとめます。

どちらかといえば、XML+XSLT をスムーズに連携させるためのヒントが得られれば満足です。


@Sklivvz

これを処理するためにpythonのlibxml2とlibxsltを使用していました。私は今xsltprocを調べています。

これらの 1 回限りの状況に適したツールのようです。ありがとう!


@diomidis-スピネリス

それは整形式ですが、(前述のように)私にはその有効性を発見する能力がありません。

スキーマを書くことに関しては、私はそのアイデアが気に入っています。

この 1 つのファイルを検証するのに費やした時間は、1 回限りの作業であれば現実的ではありませんが、ベンダーからこのようなファイルをさらに処理する必要があると予測しています。

スキーマを作成する (そしてそれをベンダーに提出する) ことは、このような XML ファンクを管理するための優れた長期戦略になります。ありがとう!

4

5 に答える 5

6

XSLTを使用して任意の大きなXMLドキュメントを処理する場合の問題は、XSLT処理が入力ドキュメントをソースツリーに解析することから始まることです。このツリーはメモリに解析されます。これは、Saxonのような堅牢なXSLTプロセッサを使用していて、仮想メモリが十分にある場合でも、最終的には問題を引き起こすのに十分な大きさの入力ドキュメントに遭遇することを意味します。(それでも機能する可能性がありますが、遅くなります。)

これにXSLTを使用しないもう1つの理由は、複数の出力ドキュメントを作成していることです。これは、(これまでの説明に基づいて)入力ドキュメントに対して複数のパスを作成していることを意味します。

(私が知らないあなたの状況に関する多くの要因に応じて)XSLTを使用する代わりにSAXベースのアプローチを採用する方が良いかもしれません。SAXプロセッサを使用すると、ソースドキュメントを単一の転送専用パスで通過させ、それを解析し、それらを含む要素に遭遇したときにすべての出力ドキュメントを書き込むメソッドを記述できる場合があります。

于 2008-09-29T21:25:28.727 に答える
3

これは、大きな XML ファイルまたは XSLT プロセッサのバグのようです。ファイルで確認する必要があることが 2 つあります。

  1. ファイルは整形式の XML ですか? つまり、すべてのタグと属性が適切に終了し、一致していますか? xmlstarletのような XML プロセッサは、それを教えてくれます。
  2. ファイルに有効な XML が含まれていますか? このためには、スキーマと XML バリデータが必要です ( xmlstarletもこのトリックを行うことができます)。ファイルのスキーマ定義を作成する努力をすることをお勧めします。発生している可能性のある問題の正確な原因を簡単に特定できるため、デバッグが大幅に簡素化されます。

ファイルの形式が正しく、有効であるにもかかわらず、XSLT プロセッサが期待どおりの結果を提供しない場合は、問題がプロセッサにあることを確認できます。別のプロセッサを試す必要があります。

于 2008-09-29T16:36:22.167 に答える
2

どの言語/パーサーを使用していましたか?
大きなファイルの場合、Unix コマンド ライン ツールを使用するようにしています。
それらは通常、他のソリューションよりもはるかに効率的であり、大きなファイルで「がらくた」することはありません。

使ってみてxsltproc

于 2008-09-29T16:32:01.740 に答える
2

Saxon XSLT プロセッサをお勧めできますか - Java JVM に十分なメモリを与えれば、大きなファイルを処理できるという事実を知っています。

もう1つのことは、XSLTに役立つ最適化があるかもしれないということですが、そのようなことについて包括的な声明を出すのは難しいです.

于 2008-09-29T17:51:27.757 に答える
0

Apache のXalan C++を調べてください。私の経験では、他の人 (Saxon を含む) が「大きな」XML ファイル (>600 MB) で失敗しましたが、これは余裕のあるメモリで実行できました。

于 2008-10-23T20:25:48.033 に答える