我正在使用boost ptree来读取这样的xml文件:
ptree myTree;
... /*open xml file*/
try{
myTree.get<string>(s);
}
catch(boost::exception const& ex)
{
/*get useful info!*/
}
我知道我可以使用what()
函数,但它会产生错误以及我刚发送的字符串。
有没有办法获得更多有用的信息,比如xml中与呼叫相关的行号?
答案 0 :(得分:2)
如果要检测格式错误的XML(而不是XML文档,它只是不包含您期望的值,在这种情况下,行号不可行):
#include <iostream>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
int main(int argc, char* argv[])
{
boost::property_tree::ptree pt;
try {
read_xml(argv[1], pt);
} catch (const boost::property_tree::xml_parser::xml_parser_error& ex) {
std::cerr << "error in file " << ex.filename() << " line " << ex.line() << std::endl;
}
}
现在假设t.xml
不是有效的XML文档:
$ a.out t.xml
error in file t.xml at line 10
答案 1 :(得分:1)
boost :: property_tree不再有行号的概念了。基本上它只是一个可迭代的树。它不知道其内容是从文件解析,是以编程方式添加还是从无处出现。因此,当树不包含您要查找的值时,无法获取行号。
您可能想要考虑的事情:
get<string>
的其他变体。如果您期望的数据不存在,有许多变体允许您指定默认值,获取null或执行其他操作。