問題タブ [rapidxml]
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.
c++ - Rapidxml:ノードを反復処理する方法は?最後の兄弟を除外します
Rapidxmlを使用して、ノードのセットをループしたいと思っています。これを行うための最良の方法であることがわかったものを使用しています(信頼できるスタックオーバーフローから、ドキュメントには反復の例がないようです)。
残念ながら、私のOSX 10.6では、これは最後の兄弟ノードを除外しています-ループの最後の反復で、next_siblingが2回呼び出されるためだと思います。ループの後に書くと、この最後のノードに到達できます。
...しかし、それは危険であり、プログラムはその時点で終了します。
最初の質問:これは私のセットアップ(OSX 10.6)のユニークなものでしょうか、それとも間違ってコーディングしたのでしょうか?
2番目の質問:rapidxmlを使用して未知の数のXMLノードを反復処理する正しい方法であると彼らが信じている例を誰かが持っていますか?
みんなありがとう
ピート
c++ - RapidXML /C++クラスポインタの副作用による解析での再帰の問題
C ++でのXML解析にRapidXMLを使用しようとしたときに、最近遭遇したこの奇妙で興味深い状況を共有したいと思います。
特定のノードの子の中から特定のノードを検索して返す再帰関数を作成したかったのです。私の最初の試みは:
たまたま最初の子でのみ正しく機能しましたが、XMLファイルのより深いところにネストされているノードを検索すると、ノードが見つかります(coutが表示されます)が、returnステートメントの後にforサイクルが1つ実行されているようです(またはいくつか)より多くの時間(おそらく再帰の呼び出しスタックのため)、それから終了し、ポインタが失われます。
だから私は一時変数でそれを修正しようとしました、このように:
しかし、何も変わりませんでした。
残念ながら、RapidXMLのノードはクラスポインタであるため、この状況では、副作用により正しい結果を引き出すことができません。
誰かがこの状況を発見したか、または別の方法でこの問題を解決しましたか?
c++ - url属性のrapidxml解析エラー
次のようなxmlファイルを解析すると、rapidxmlで奇妙なエラーが発生します
「expected >」をスローします。次のようなコードを使用してデータを解析しています
IMG ラグの「/」記号が問題ではないようです。これはrapidxmlのバグですか、それとも何か間違っていますか?
c++ - parse_error 例外をスローする RapidXML
RapidXML フレームワークを使用して単純な .xml ファイルを解析しようとすると、「expected <」という原因で parse_error がスローされます。XMLコードを書くのは実質的に初めてなので、ばかげた構文エラーかもしれませんが、その場合はご容赦ください:) これは私のxmlParser.hです:
そして、これはそれがどのように呼び出され、使用されるかです:
login_gui.xml :
c++ - ファイルからの RapidXML 読み取り - 何が問題なのですか?
入力ファイルを読み取るこれら 2 つの方法の違いは何ですか?
1) 使用'ifstream.get()'
と
2) vector<char>withの使用ifstreambuf_iterator<char> (私にはあまり理解されていません!)
(気の利いたベクトルメソッドを使用するという明白な答えを除いて)
入力ファイルは XML であり、以下に示すように、すぐに rapidxml ドキュメントに解析されます。(他の場所で初期化されます。メイン関数の例を参照してください。)
最初に、'load_config' 関数を記述する 2 つの方法を紹介しますifstream.get()。vector<char>
方法 1ifstream.get()は、動作するコードと安全な RapidXML ドキュメント オブジェクトを提供します。
方法 2 では、別のライブラリ (具体的には curl_global_init(CURL_GLOBAL_SSL) の呼び出し [以下のメイン コードを参照]) によってクローバー化された rapidXML ドキュメントが生成されますが、まだ curl_global_init のせいではありません。
メインコード:
これはすべて単一のスレッドで実行されると確信していますが、私の理解を超えた何かが起こっている可能性があります。
ファイルロード機能を変更するだけで、原因ではなく症状だけを修正したことも心配です。ここでコミュニティに助けを求めてください!
質問: ベクトルから文字配列に移動すると、これが修正されるのはなぜですか?
ヒント: RapidXML は、実際に入力文字列に直接アクセスする巧妙なメモリ管理を使用していることを認識しています。
ヒント: 上記のメイン関数は、動的な (新しい) xml_document を作成します。これは元のコードにはなく、変更をデバッグした結果です。元の (失敗した) コードはそれを宣言し、動的に割り当てませんでしたが、同じ問題が発生しました。
完全な開示のためのもう 1 つのヒント (なぜそれが重要なのかはわかりませんが) - このコードの混乱には、rapidxml::xml_document オブジェクトのデータによって取り込まれたベクトルの別のインスタンスがあります。
c++ - ファイルストリームオブジェクトの適切な選択
アプリケーションはRapidXMLを使用してXMLファイルを編集します。編集は自動化されておらず、時々行われます。XMLコンテンツはGUIに表示され、ユーザーはXMLを変更するいくつかのアクションを実行します。各変更はすぐにディスクに保存する必要があります。
RapidXMLドキュメントオブジェクトをロードするには、ファイルの内容を文字列にコピーする必要があります。ドキュメントを変更するたびに、ドキュメントオブジェクトのコンテンツがファイルにコピーされます。
この例では、ファイルは入力と出力の両方に使用されます。この場合、すべての入出力操作に単一のオブジェクトを使用する必要がありますか?std::fstreamこれは、アプリケーションの起動時に一度開かれ、入出力に使用され、アプリケーションの終了時に閉じられます。
std::ifstreamstd::ofstreamまたは、ファイルの入出力を実行する必要があるときはいつでも、のローカル(一時的な)インスタンスを使用する必要がありますか?たとえばstd::ifstream、ファイルを読み取るために最初に使用されます(開く、読み取る、閉じる)。同様に、std::ofstreamDOMをファイルにエクスポートする必要がある場合(開く、書き込む、閉じる)に使用されるインスタンス。
ここでは(アプリケーションの性質上)パフォーマンスについては心配していませんが、この場合のファイルストリームオブジェクトの適切な選択については興味があります。
c++ - xml ファイルを反復処理してマップに格納する方法
RapidXml を使用してファイルを反復処理し、マップに格納する方法... ファイルの内容を使用して辞書を作成するようなもの。これを試してみましたが、内部レベルではなく、キーと値のペアの最初のレベルしか取得できません。
c++ - エラー処理: 「致命的な」エラーと「予期しない入力」エラーの区別
私は XML ファイルを読み取るプログラムに取り組んできましたが、ifstream がファイルを開くことができない場合、std::ifstream::failure がスローされます。この例外は、std::ifstream::failbit が設定されるか、std::ifstream::badbit が設定されるたびにスローされ、(少なくとも私の意見では) 例外処理を保証するタイプのエラーです。
ファイルを開いた後、RapidXML を使用して DOM オブジェクトを作成します。その解析関数が失敗すると、rapidxml::parse_error がスローされます。これは、エラーが実際には致命的ではないタイプの状況です。それは単なる入力ミスです。いずれにせよ、rapidxml が xml ファイルの解析に失敗した場合に例外をスローするのは公平だと思います。 . RapidXML で例外をオフにすることもできますが、それでもこれらの例外的なケースを手動で処理する必要があり、例外メカニズムを介して処理する方がはるかに簡単です。ただし、これは間違いなくあいまいな領域です。Rapidxml::parse が例外をスローする理由は、ifstream の場合ほど明確ではありません。
最後のケースは、DOM を解析しているときに、予期しない、または予期しないノードに遭遇した場合です。明らかに、プログラムは予期しない入力にもかかわらず実行を続けることができますが、私はそれを望んでいません。ここで例外をスローすることも考えられますが、それが意味があるかどうかはわかりません。
そこで、少しアドバイスをお願いしたいのですが、例外処理のベスト プラクティスにはどのようなものがありますか? コンストラクターでこれらすべてを実行することにより、ファイルを解析するクラスで RAII イディオムを使用しようとしています。ファイル解析クラスをインスタンス化するために boost::shared_ptr を使用するため、コンストラクターがスローした場合、boost::shared_ptr はファイル解析クラスを削除した後に std::bad_alloc を再スローします。
XML ファイルがこのクラスが期待するものに準拠していない場合に、これが発生することについて議論することができます。また、予期しない入力が提示された場合に例外をスローすることは理にかなっていると思いますが、私は本当に確認したいと思います私の思考プロセスが正しいこと。
c++ - RapidXML を使用して xml-stylesheet 宣言を生成する方法は?
通常の xml ヘッダー () を生成する方法は知っていますが、特に xml-stylesheet 宣言を生成する方法がわかりません。誰かが以前にやったことがありますか?質問をグーグルで検索しても、関連するものは何も得られませんでした。
c++ - Windows CE 6.0 / Windows Mobile / WindowsEmbeddedCompactでRapidXmlを使用した場合の奇妙な例外
Visual Studio2005でコンパイルされたWindowsCE6.0でRapidXml1.13を実行しようとすると、非常に奇妙な問題が発生します。実行に失敗する非常に小さなプログラムがあります。
エラー0、警告0(W3)で正常にコンパイルされます。ただし、プログラムを実行またはデバッグすると、アクセス違反の例外が発生します。
RapidXml_Test.exeの0x000110d4でのファーストチャンス例外:0xC0000005:アクセス違反の書き込み場所0x0001fb48。
次に、デバッガーはこの行(rapidxml.hppの1366)を原因(中括弧)として指し示します。
誰かが問題が何であるかについての手がかりを持っているならば、私はそれを大いに感謝します。ビルドおよびランタイム環境で動作するコードははるかに複雑なので、そこには何も疑わない。また、プロジェクトの設定ではないと確信しています。この時点で、RapidXmlによるテンプレートの使用は、Windows CEVC++コンパイラを混乱させていると思います。他に何ができるかわかりません。
前もって感謝します!