1

XML ドキュメントからいくつかのデータをロードし、それを変更して、XML に書き戻しています。読み取りは SAX パーサー ライブラリを使用して行われ、書き込みはカスタム コードの一部を使用して行われます。場合によっては、ファイルが外部で変更され、余分な要素が追加されます (スタイルシートへの参照など)。ファイルを読み込んで保存するときにこれらの余分な要素を失うのではなく、不明なタグを通過させて表示したいと思います

未知の要素が解釈された要素から分離されている場合、未知の要素と属性を文字列として保存し、後で出力するのは簡単なはずですが、それらが解釈された要素内に散在してネストされていると、あまり明白ではなくなります。

誰もこれを行うための簡潔な方法を提案できますか? DOM パーサーに切り替える方が簡単でしょうか? パフォーマンスは問題ではありません。

注意。私は Gnome Glib::Markup::Parser を使用して C++ で作業していますが、言語/ライブラリにとらわれない回答を好みます。

4

2 に答える 2

1

コンテンツ ハンドラーをどのように作成したかはわかりませんが、保持する外部変更を含むすべてのイベントでメソッドを呼び出す必要があります。startElement()およびコールendElement()バックは、要素名と属性をテストして、変更する要素に対して特殊なメソッドを呼び出すかどうかを決定できますが、デフォルトでは、コールバックが呼び出されたイベントを再構築して出力するだけです。このように、特別に処理しない要素は、デフォルトで出力されます。

XSLT でも同じようなことができます。恒等変換 (入力に与えられたものを正確に出力するスタイルシート) を取得し、カスタム変更のためのより具体的な一致式を含むテンプレートを追加します。ほとんどのアプリケーションでは、SAX や DOM よりも XSLT の方が扱いやすいと思います。

于 2008-10-30T18:50:10.587 に答える
0

xml ファイルを変更し、変更後に別のファイルに保存する場合、SAX は適切な方法ではないと思います。私のアドバイスは、DOM を使用することです。ファイル全体 (外部で行われた変更を含む) をロードするので、何をしたいのかを考えるだけで済みます。後で保存すると、すべて元の場所に戻ります。

于 2008-10-31T09:11:44.017 に答える