2012-04-12 28 views
0

から子どもを得ることができない、私は子供だけトップレベルでXML要素を取得し、することはできません。RapidXml:RapidXmlライブラリを使用して、次のC++コードで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 

子供はどのように入手できますか?

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

答えて

2

第2のparentは、最初の兄弟(「兄弟」は現実の兄弟姉妹のように同じレベルにあります)です。

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(); 
} 
2

まずあなたは、このような "1.xml"

<parent> 
    <child>123</child> 
</parent> 
<parent> 
    <child>456</child> 
</parent> 
として、XMLデータをファイルに保存することができますが

あなたは次のようにすることができます:

void Parse(std::string strFilePath) 
{ 
    rapidxml::file<> docFile(strFilePath.c_str()); 
    rapidxml::xml_document<> doc; 
    doc.parse<0>(docFile.data()); 

    rapidxml::xml_node<> *pNode = doc.first_node(); 
    for (; pNode != NULL; pNode = pNode->next_sibling()) 
    { 
     std::cout << pNode->name() << std::endl; 
     for (rapidxml::xml_node<> *pChildNode = pNode->first_node(); pChildNode != NULL; pChildNode = pChildNode->next_sibling()) 
     { 
      std::cout << " " << pChildNode->name() << " " << pChildNode->value() << std::endl; 
     } 
    } 
} 
関連する問題