8

ブースト ptree を使用して、次のような xml ファイルを読み取ります。

ptree myTree;
... /*open xml file*/
try{
    myTree.get<string>(s);
}
catch(boost::exception const&  ex)
{
/*get useful info!*/
}

関数を使用できることはわかっていwhat()ますが、エラーが発生し、送信した文字列が返されます。

呼び出しに関連する xml の行番号など、より有用な情報を取得する方法はありますか?

4

2 に答える 2

1

boost::property_tree には、行番号の概念がなくなりました。基本的には反復可能なツリーです。その内容がファイルから解析されたのか、プログラムによって追加されたのか、どこからともなく出てきたのかはわかりません。したがって、探している値がツリーに含まれていない場合、行番号を取得する方法はありません。

考慮すべき事項:

  • XML スキーマを改善して、解析時に欠落している情報をキャッチします。@JohnZwinck がすでに指摘しているように、解析中に行番号がまだ存在します。このように、「xmlを作成した人が[構造的に何か]を変更することにした」ことを確実に除外できるはずです。
    XML がどのように見えるべきかの決定を担当しているように聞こえます。このような場合でも、プログラムは XML が特定の方法で形成されて意味のあることを行うことを期待しています。そして、これがスキーマの出番です。彼らがスキーマを変更することを決定した場合、設計したスキーマとの不一致がどこにあるかすぐにわかります。
  • の別のバリアントを使用しget<string>ます。期待するデータが存在しない場合に、デフォルト値を指定したり、null を取得したり、何か他のことをしたりできる多くのバリアントがあります。
    あなたの try-instant-catch-debug-continue コード パターンは、期待するデータが完全にはわからず、データが存在しなくても重要ではないことを示唆しています。例外は例外的な状況のためのものです。これは一つではないように私には思えます。
于 2013-12-22T19:38:36.730 に答える