繁体   English   中英

在RapidXML中找到xml_node的一行(和一列)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM