1

C ++でRapidXMLを使用してXMLファイルを解析しようとしています。ファイルは次のようになります:

<root>
    <a>
        <b>1111</b>
        <c>
            <d1>2222</d1>       
            <d2>3333</d2>
        </c>
    </a>
</root>

私が行っている親ノードを識別するには:

if (currentNode->first_node() != 0) { // this node has children, search for them }

最初の2つのノード(ルートとa)に対しては正常に機能しますが、ノード'b'に対してこれを行うと、0ではなくどこかへのポインターが返されますが、'b'には子ノードがありません。0を返すべきではありませんか?RapidXMLのドキュメントには次のように書かれています。

function xml_node::first_node概要

xml_node<Ch>* first_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;

説明 最初の子ノードを取得します。オプションでノード名と一致します。

パラメータname 検索する子の名前。名前に関係なく、最初の子を返す場合は0。name_sizeがゼロ以外の場合、この文字列はゼロで終了する必要はありません

name_size 名前のサイズ(文字数)、または文字列からサイズを自動的に計算する場合は0

case_sensitive 名前の比較では大文字と小文字を区別する必要があります。大文字と小文字を区別しない比較は、ASCII文字に対してのみ適切に機能します

見つかった子へのポインタを返します 。見つからない場合は0を返します。

なぜこれが起こっているのか、私が間違っているのか、何か考えはありますか?

ありがとう

4

2 に答える 2

1

XMLの「要素ノード」(つまり、ルート、a、bなど)と、パーサーによって生成されたRapidXMLの「パーサーノード」(データノードを含む)との間で混乱しています。

ノードtype()を調べてデータノードかどうかを判断するか、parse_no_data_nodes解析フラグを使用できます。

于 2013-03-04T14:18:20.737 に答える