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 之间有一个空格
在此先感谢,任何帮助将不胜感激,因为我正在努力适应提升。
【问题讨论】:
节点的名称是labels
,type_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 ptree C++ 解析其值中包含 HTML 标记的 XML