从我在每个xml_node
knows it's position in the source text中扣除的文档中可以理解的内容。我想要做的是为给定的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
访问文档字符串以比较偏移量?
答案 0 :(得分:0)
我们假设您在字符串中解析一个简单的xml文档。
char xml[] = "<hello/><world/>"
doc.parse(xml);
RapidXML将插入空终止符(并且可能会对&#34;文档&#34;进行其他修改,所以它现在看起来像这样:
char xml[] = "<hello\000\000<world\000\000";
如果您要求name()
“你好”。节点,它返回指向&#39; h&#39;在xml
数组中。您只需减去数组的基数即可获得偏移量。
int offset = node->name() - &xml[0];
显然这不是线条和角色。为此,您需要计算偏移量和数组开始之间的换行数。 (但也许在xml数据的干净版本上执行此操作,因为RapidXML可能会破坏处理版本中的换行序列..