![](/img/trans.png)
[英]Segmentation fault when using rapidxml::xml_node<char>::first_attribute
[英]Find a line (and column) of xml_node in rapidxml
根据我在文档中可以理解的内容,我xml_node
每个xml_node
知道它在源文本中的位置 。 我想做的是检索给定xml_node<>*
LINE和COLUMN:
rapidxml::file<> xmlFile("generators.xml"); // Open file, default template is char
xml_document<> doc; // character type defaults to char
doc.parse<0>(xmlFile.data());; // 0 means default parse flags
xml_node<> *main = doc.first_node(); //Get the main node that contains everything
cout << "My first node is: <" << main->name() << ">\n";
cout << " located at line " << main->?????() << ", column " << main->?????() << "\n";
我应该如何获取这些偏移量? 我能以某种方式从main->name()
指针爬回到文档的开头吗? 但是,如何从xml_document<> doc
访问文档字符串以比较偏移量呢?
假设您将一个简单的xml文档解析为一个字符串。
char xml[] = "<hello/><world/>"
doc.parse(xml);
RapidXML将插入空终止符(并可能在“文档”中添加其他mod,因此现在看起来像这样:
char xml[] = "<hello\000\000<world\000\000";
如果您不要求'hello'节点的name()
,它会返回一个指向xml
数组中'h'的指针。 您可以减去数组的基数以获得偏移量。
int offset = node->name() - &xml[0];
显然,这不是线条和字符。 为此,您需要计算偏移量和数组开头之间的换行数。 (但是可能在xml数据的“干净”版本上执行此操作,因为RapidXML可能会破坏处理版本中的换行符。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.