在rapidxml中查找xml_node的一行(和列)

时间:2014-12-08 15:06:39

标签: c++ xml rapidxml

从我在每个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访问文档字符串以比较偏移量?

1 个答案:

答案 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可能会破坏处理版本中的换行序列..