1

次の C++ コードでは、RapidXml ライブラリを使用して、最上位レベルの XML 要素のみを取得でき、子要素は取得できません。

char *text = ... // XML file shown below
using namespace rapidxml;
xml_document<> doc;
doc.parse<0>(text);
xml_node<> *node = doc.first_node();
while(node != 0) {
    cout << node->name() << " " << node->value() << endl;
    node = node->next_sibling();    // <-- ???
}

XML ファイル:

<parent>
   <child>123</child>
</parent>
<parent>
   <child>456</child>
</parent>

実結果:

parent
parent

期待される結果:

parent
child 123
parent
child 456

どうすれば子供を手に入れることができますか?

ありがとうございました!

4

2 に答える 2

3

2 番目parentは 1 番目の兄弟です (「兄弟」は同じレベルです - 現実の兄弟姉妹のように)。

node->first_node()の最初の子になりnodeます。

次の(コンパイルされていない&テストされていない)コードは、あなたが求めている出力を生成するはずです:

xml_node<> *node = doc.first_node();
while(node != 0) {
    cout << node->name() << endl;
    xml_node<> *child = node->first_node();
    while (child != 0)
    {
        cout << child->name() << " " << child->value() << endl;
        child = child->next_sibling(); 
    }
    node = node->next_sibling();
}
于 2012-04-12T12:33:32.803 に答える