【问题标题】:RapidXml: cannot get children from XML fileRapidXml:无法从 XML 文件中获取子项
【发布时间】:2012-04-12 11:04:42
【问题描述】:

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

我怎样才能得到孩子?

谢谢!

【问题讨论】:

    标签: c++ xml rapidxml


    【解决方案1】:

    第二个parent 是第一个的兄弟姐妹(“兄弟姐妹”处于同一级别 - 就像现实生活中的兄弟姐妹一样)。

    node-&gt;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】:

      首先可以将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;
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-16
        • 1970-01-01
        • 1970-01-01
        • 2015-12-02
        • 1970-01-01
        • 2022-12-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多