問題タブ [pugixml]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sorting - pugixml ドキュメント内の並列ノード/サブツリーの場所を交換できないようです....?
ドキュメント内の 1 つのレベルで、大部分の子ノードの順序を変更する必要があります。
ドキュメントの構造は (簡略化して) 次のようになります。
現在、pugixml を使用して、大きな xml ファイルを読み込み、解析し、トラバースしてアクセスしています。最終的には、データ行の新しいシーケンスを処理しています。すべてを正しく解析していることはわかっており、再シーケンスの結果を見ると、読み取りと処理が正しいことがわかります。すべての最適化と処理を行った後の再シーケンス ソリューションは、上記の例の { D,A,E,C,B } のように、修正された順序のインデックスのリストです。そのため、実際にそれらをこの新しい順序に再配列し、結果の xml を新しいファイルに出力する必要があります。実際のデータは約 16 メガバイトで、数百のデータ要素行ノードと、各行に 100 以上のデータ要素があります。
2 つのデータ行をスワップするルーチンを作成しましたが、スワップ中に xml 構造の一貫性を破壊しています。pugiがノードを移動したり、ノードハンドルを無効にしたりする方法を理解していないと確信しています。
ノード ハンドル -- pugi::xml_node -- を作成して、「テーブル」レベル ノード、「ヘッダー」行ノード、および「最初のデータ」行ノード (上記の元の形式ではノード) に設定します。 「データ行A」。これらのハンドルを使用すると、適切なデータに正しくアクセスできることがわかっています。実行を一時停止して、最適化と再順序付けの計算中にそれらを調べ、行とその兄弟を調べて、入力順序を確認できます。
「ヘッダー行」は常にテーブルの特定の子であり、「最初のデータ行」は常に「ヘッダー行」の直後の兄弟です。そのため、ファイルをロードするときにこれらを設定し、データの一貫性をチェックします。
node::insert_copy_before についての私の理解は次のとおりです。
私の理解では、すべての子と属性を持つ node_to_be_copied_to_child_of_parent の深い再帰的クローンが、両方とも親ノードの子である node_to_be_copied_nodes_next_sibling の直前に兄弟として挿入されるということです。
明らかに、node_to_be_copied_nodes_next_sibling も「最初のデータ行」である場合、最初のデータ行へのノード ハンドルは操作後も有効である可能性がありますが、実際には最初のデータ ノードへのハンドルではなくなります。しかし、ドキュメントで insert_copy を使用すると、変更の近く (またはそうでない) の個々のノード ハンドルが強制的に更新されるのでしょうか?
それでは、私が機能させようとしているコードを見てみましょう。
// この時点で、作成したすべてのハンドルが目的のデータを指していることがわかります。
// ここから私の懸念が始まります。このコピーは、2 番目のターゲット行のコピーを表ノードの下の位置に移動し、// xmnNodeAfterFirstNode の直前の子として実行しますか? もしそうなら、この操作はデータ行ノードへの他のハンドルを無効にしますか? // 兄弟のリストに挿入/コピーを行うとすぐにすべての賭けがオフになりますか、それともその子のリスト内の他のノードへのハンドルは有効なままですか?
// 明らかに、データ行ノードへの他のハンドルが最初の insert_copy によって無効にされた場合、これらのハンドルはもはや役に立たなくなります...
// これは、元のデータ行ノードを新しい場所にコピーした後で削除しようとする試みです
// 以前と同様に、insert_copy メソッドを使用した結果、多くのハンドルが動き回った場合、「最初のデータ行ノード」の更新に基づいて // ヘッダーへの「既知の」ハンドルに基づいて処理することはできませんデータ行ノード。
私が言ったように、これは結果の xml の構造的な一貫性を破壊します。保存できますが、メモ帳以外は何も読み取れません。テーブルが少し文字化けしてしまいます。独自のプログラムを使用して読み取ろうとすると、当然のことながら、リーダーは「要素の不一致」エラーを報告し、読み込みを拒否します。
だから私は1つ以上のことを間違っています。彼らは何ですか?
html-parsing - PugiXML は空白を保持しますが、EOL は保持しません
HTML を xml に変換し、タグ名などを変更していますが、空白の保持に問題があります。これは私がファイルをロードしている方法です:
しかし、そのように使用すると、'\n' と '\r' も保持されます。parse_escapes と parse_eol がデフォルトでオンになっているため、理由がわかりません。
parse_ws_pcdata_single は、保存したくない空白に兄弟があるため、私には合いません。
c++ - pugixml解析を使用して同じノード名を持つノードのノードデータを取得するにはどうすればよいですか?
同じ子ノード名を持つノードのすべての子に対して同じノード値を取得しています。たとえば、ここで私のコードでは、ノード名のノード データ値をすべての場合に ACHRA として取得しています。取得したい正しいノード値。ガイドしてください。
これが私のコードです:
XML コード:
C++ コード
私の出力は次のとおりです。
c++ - pugixml と rapidxml を使用してノードを移動する (コピーしない)
DOM インターフェイスをサポートする XML ライブラリを探しています。私にとってパフォーマンスは重要なので、現在rapidxmlとpugixmlを調べていました。
問題は、ノードの移動を含め、アプリケーションで DOM ツリーを変更する必要があることです。そして、これを行う直接的な方法がわかりません(rapidxmlでもpugixmlでも)。ノードをコピー/クローンする必要があるようです。移動するサブツリーが非常に深い場合、多くのコピー操作が発生する可能性があります。
これを行うより効率的な方法はありますか (rapidxml または pugixml のいずれかを使用) (たとえば、ポインターの交換など)? そうでない場合、これを可能にする他の軽量ライブラリはありますか?
ありがとう!
c++ - pugixml を使用してコードブロック (C++) で XML ファイルを開く
コードブロックとライブラリ pugixml を使用して xml ファイルを解析する方法を探していましたが、さまざまな方法を試しましたが、まだ機能しません。
私が解析しなければならない XML はグラフ (houses) で構成されており、C++ での私のプログラムは、構造体を使用してこのグラフを表現することです。
XML ファイルは次のようになります。
等...
C++ のコード: (重要な部分 :) )
教えてください、コードの間違いは何ですか? 常にif条件に入ります。つまり、ファイルをロードしません。ありがとうございました!