0

次の形式のXMLファイルがあります

<Objects>
    <Object>
        <Id>1</Id>
        <Name>Head</Name>
    </object>
    <Object>
        <Id>2</Id>
        <Name>Right Hand</Name>
    </object>
    <Object>
        <Id>3</Id>
        <Name>Left Hand</Name>
    </object>
    <Object>
        <Id>4</Id>
        <Name>Right hand</Name>
    </object>
    <Object>
        <Id>5</Id>
        <Name>Cup</Name>
    </object>
    <Object>
        <Id>6</Id>
        <Name>Book</Name>
    </object>
</Objects>

そして、ループを使用して、次の方法でオブジェクトごとにファイルにアクセスしたいと思います。

xml_node nodeObjects = doc.child("Objects").child("Object");

    for(xml_node_iterator it = nodeObjects.begin(); it != nodeObjects.end(); ++it)
    {
        cout<<"Name = "<<it->child_value("Name")<<endl;
    }

そしてまた:

xml_node nodeObjects = doc.child("Objects");
for(xml_node nodeObject = nodeObjects.first_child(); nodeObject; nodeObject = nodeObject.next_sibling())
    {
        numOfObjects += 1;
        const char *id = nodeObject.child_value("Id");
        const char *name = nodeObject.child_value("Name");

        //cout<<"ID = "<<id<<" Name = "<<name<<endl;
        //cout<<nodeObjects.next_sibling("Object").child_value("Id")<<endl;;

    }

そして最後に:

xml_node nodeObjects = doc.child("Objects");
for(xml_node nodeObjects: nodeObjects.children("Object"))
    {
    }

最初の2つのメソッドは期待される結果を出力しませんでしたが(最初の反復のみが機能します)、コンパイラーは3番目のメソッドは構文エラーであると言います!

助けて!

4

1 に答える 1

2
  1. XMLファイルの形式が正しくありません。終了タグ名は開始タグと一致する必要があります。比較では大文字と小文字が区別されます。xml_document :: load_fileの戻り値をチェックして、ドキュメントが正常にロードされたかどうかを常にチェックすることを忘れないでください。現在のように、解析はおそらく失敗し、空のドキュメント(または、最初のエラーまでのドキュメントの一部、つまり最初のオブジェクトのみ)を取得します。

  2. 最初のループは、nodeObjectsの子を繰り返し処理します。それが機能するためには、nodeObjectsは最初のObjectの子ではなく、Objectsタグを参照する必要があります。

  3. 2番目と3番目のループは正常に見えます-3番目のループはC++11機能を使用しているため、まだサポートしていないコンパイラでは機能しません。

于 2012-12-19T16:39:57.380 に答える