1

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

4

1 回答 1

1

Ptrees 并不适合解析 XML,但 Boost 是如此集成到我的项目的其余部分中,以至于使用 libxml2 或其他解析器会非常费力

对不起,这没有意义。

有仅标题选项,以及大量非常轻量级的选项。请参阅我应该在 C++ 中使用什么 XML 解析器?

由于 Boost Property Tree简单而明显地不是库,因此添加库的感知成本将远远超过与您将遇到的破坏抽象和不可能性作斗争的成本。

当我使用 read_xml 时,似乎我必须声明标签名称。似乎没有一种方法可以读取父节点下的所有子节点并存储它们。

干得好:

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

我也通读了 boost 文档,但似乎找不到任何东西。

我将从这里开始:https ://www.boost.org/doc/libs/1_73_0/doc/html/property_tree/parsers.html#property_tree.parsers.xml_parser 。专注于局限性。并不是所有的限制都是明确的(参见 RadidXML 的文档)。

你知道 boost 如何获取子节点或我可以查看的其他 c++ 解析器吗?

请参阅上面的第一个链接:)

也可以看看:

  • 在我的答案中搜索“不是 xml 库”
  • 对于使用 XML的任何属性树答案,同上- 请注意,我们从不指定要读取的节点 - 因为这根本不可能。但是,许多答案详细说明了如何通过某些动态路径查找节点,如果那是您真正想要的
  • 我的一些使用 PugiXML 的答案——其中大部分是针对 Boost Property Tree 无法处理的问题
  • 其他一些库TinyXMLRapidXML,只是为了了解它们何时适合/不适合
于 2020-07-29T18:40:57.710 回答