使用 Boost PTree w/o 标签解析 XML

Parsing XML's with Boost PTree w/o tags

我想知道 Boost Ptree 是否允许在不知道属性标签的情况下解析 .xml 文件。我有一个 XML 文件,它会定期更新新标签、新数据,甚至删除某些标签。这些常规更改促使我研究在不对属性名称进行硬编码的情况下解析文件。有什么方法可以在不说明标签名称的情况下读取 XML 文件中的所有数据?感谢您的帮助!

Ptrees aren't ideal for parsing XML but Boost is so integrated into the rest of my project that it would be incredibly taxing to use libxml2 or another parser

抱歉,这没有意义。

有 header-only 个选项,还有很多 light-weight 个选项。参见 What XML parser should I use in C++?

由于 Boost 属性 Tree 简单明了不是您需要的库 添加库的感知成本将远远超过与损坏的库作斗争的成本你会遇到的抽象和不可能。

And it seems like I do have to state the tag name when I use read_xml. There doesn't seem to be a way that I can read all the child nodes underneath a parent node and store them.

给你:

#include <boost/property_tree/xml_parser.hpp>

int main() {
    boost::property_tree::ptree pt;
    std::ifstream ifs("input.xml");

    read_xml(ifs, pt);
    write_xml(std::cout, pt);
}

I've also read through the boost documentation but couldn't seem to find anything.

我将从这里开始:https://www.boost.org/doc/libs/1_73_0/doc/html/property_tree/parsers.html#property_tree.parsers.xml_parser。关注局限性。并非所有限制都在那里明确显示(请参阅 RadidXML 文档)。

Do you know how boost get child nodes or other c++ parsers I could look at?

先看上面的link:)

另请参阅:

  • 在我的答案中搜索 "not an xml library"
  • 同上 Property Tree answers using XML - 请注意,我们从不指定要读取的节点 - 因为那根本不可能。许多答案详细说明了如何通过一些动态路径查找节点,但是,如果那是您真正想要的
  • 我的一些 answers that use PugiXML - 其中大部分是对无法使用 Boost 属性 Tree
  • 处理的问题的回应
  • 其他一些库 TinyXML, RapidXML,只是想了解一下它们何时 suitable/nice 或不