c++ - RapidXML 以深度优先模式解析 XML

标签 c++ xml parsing dom rapidxml

我正在尝试在 C++ 中使用 RapidXML 解析大型 XML 文件 (1.8 GB)。虽然我可以使用以下方法获取任何特定节点的子节点:

for(xml_node<> *child = node->first_node(); child; child = child->next_sibling()) {
...
}

我不知道如何解析深度优先。 RapidXML 不为此提供任何内置迭代器。是否有任何其他用于大型 xml 处理的性能密集型库(在 DOM 中,而不是在 SAX 中)?

最佳答案

您混淆了 XML 的解析和内容的遍历。

RapidXML 在单个线性过程中解析 XML,同时构建对象树。然后您可以以任何您想要的方式遍历树。

深度优先搜索通常是一个递归过程,但在您的搜索中,您将使用您展示的代码遍历每个节点的所有兄弟节点。不同之处在于您在遍历每个节点时对每个节点执行的操作。

  void processNode(xml_node<> node)
  {
    for(xml_node<> *child = node->first_node(); child; child = child->next_sibling()) 
    {
      processNode(child);
      ... and do more stuff here...
    }
  }  

关于c++ - RapidXML 以深度优先模式解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36548467/

相关文章:

c++ - Emscripten 不从静态库链接

c++ - 创建一个 C++ 类以使用 libcurl 从网站读取数据到字符串

json - 将 Atom (XML) 转换为 JSON

php - 为什么使用 XML 作为存储格式?

java - 如何将银行信息解析成特定格式,加java题

c++ - 每个进程或每台计算机的线程 ID 是唯一的吗?

c++ - 在函数中使用 throw 关键字会产生 gcc 警告

c# - 如何将属性隐藏到用于 XML 序列化的基类中

ruby - 我如何在 Ruby 中标记这个字符串?

c - 如何解析char数组的结尾?