RapidXml:无法从 XML 文件中获取子项

RapidXml: cannot get children from XML file

本文关键字:获取 文件 XML RapidXml      更新时间:2023-10-16

使用以下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

我怎样才能得到孩子?

谢谢!

第二个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();
}

首先,您可以将XML数据保存到文件中,例如"1.xml"

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

那么我认为你可以这样做:

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;
        }
    }
}