我正在使用 boost ptree 来读取这样的 xml 文件:
ptree myTree;
... /*open xml file*/
try{
myTree.get<string>(s);
}
catch(boost::exception const& ex)
{
/*get useful info!*/
}
我知道我可以使用该what()
函数,但它会产生错误和我刚刚发送的字符串。
有没有办法获得更多有用的信息,比如 xml 中与调用相关的行号?
如果您想检测格式错误的 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
boost::property_tree 不再有行号的概念。基本上它只是一个可迭代的树。它不知道它的内容是从文件中解析出来的、以编程方式添加的还是突然出现的。因此,当树不包含您要查找的值时,就无法获得行号。
您可能需要考虑的事项:
get<string>
. 如果您期望的数据不存在,有许多变体允许您指定默认值、获取 null 或执行其他操作。