c++ boost xml解析器ptree.get函数——不接受节点名中的空格

Posted

技术标签:

【中文标题】c++ boost xml解析器ptree.get函数——不接受节点名中的空格【英文标题】:c++ boost xml parser ptree.get function -- doesnot accept white space in node name 【发布时间】:2015-09-21 08:03:51 【问题描述】:

尝试使用 c++ 的 boost xml 解析器从 xml 文件中获取内容..

opencv.xml

<opencv_storage>
     <labels type_id="opencv-matrix">
          <data>0 0 0 0 1 1 0 0</data>
     </labels>
</opencv_storage>

C++ 代码片段

using boost::property_tree::ptree;
    ptree pt;
    boost::property_tree::read_xml("opencv.xml", pt);

    std::string m_file = pt.get<std::string>("opencv_storage.labels type_id=\"opencv-matrix\".data");

    std::cout<<"m_file "<<m_file<<std::endl;

程序在执行时抛出异常:

No such node (opencv_storage.labels type_id="opencv-matrix".data)

我怀疑,labels 和 type_id 之间有一个空格

在此先感谢,任何帮助将不胜感激,因为我正在努力适应提升。

【问题讨论】:

节点的名称是labelstype_id字段是该节点的单独属性。就像在 html 中节点可以具有属性一样。试试"opencv_storage.labels.data" @Joachim 它工作..非常简单.. 【参考方案1】:

当然不是。元素名称中的空格在 XML 中是非法的。

你真正想要的是属性:Parsing XML Attributes with Boost

或者,更好的是,您想使用 XML 解析器,这里:What XML parser should I use in C++?


如果你想以某种方式使用poperty树(你确定吗?)看这里:

boost::ptree find? or how to access deep arrays? C++

enumerate-path 函数显然也可以用于 XML,因为它需要 ptree

【讨论】:

以上是关于c++ boost xml解析器ptree.get函数——不接受节点名中的空格的主要内容,如果未能解决你的问题,请参考以下文章

使用 Boost C++ 为嵌套标签解析 xml

C++ BOOST库解析XML文件的问题

如何使用 Boost ptree C++ 解析其值中包含 HTML 标记的 XML

Boost XML 解析器可以支持 <![CDATA[ … ]]> 吗?

Boost的属性树:删除一个知道其路径的孩子

使用Boost JSON解析器的JSON格式错误