使用TinyXPath搜索XPath时的性能问题

时间:2015-01-28 00:14:34

标签: c++ xml xpath tinyxml tinyxpath

我有一个相当大的XML文件(~11MB),我使用TinyXPath来定位一些节点。尽管我尝试定位的节点不能在以后的DOM中与其他节点混淆,但XPath查询需要几分钟才能返回。

以下是我的示例XML:

<RootElement>
  <Header>
    <Location>1234</Location>
    ... maybe a dozen sibling nodes
  </Header>
  <EventReport>
    <SomeEvent>with a few dozen child nodes</SomeEvent>
      ... 2,000+ SomeEvent nodes
  </EventReport>
</RootElement>

这是我的c ++代码:

TiXmlDocument doc;
doc.LoadFile("C:\\Path\\To\\file.xml");
TiXmlNode *locationNode = TinyXPath::XNp_xpath_node(doc.RootElement(), "//RootElement/Header/Location");

从暂停和检查堆栈跟踪看起来,它似乎正在尝试解析和遍历整个XML结构。但是,RootElement只有2个子节点:HeaderEventReport。由于我没有在(非常大的)EventReport节点下寻找任何东西,我希望这个查询会非常快。

此外,如果我缩小示例XML以仅包含几个SomeEvent节点,则此查询几乎立即返回。

这是TinyXPath的已知限制吗?有没有更好的方法来构建我的查询以及时返回?

1 个答案:

答案 0 :(得分:0)

成本可能不在于评估XPath,而在于将源文档解析为适合XPath引擎的树。您说RootElement只有2个子节点,但在解析文档之前,XPath引擎无法知道这一点。话虽如此,没有理由它需要几分钟。每兆字节一秒是合理的,任何看起来效率低的东西。但是,我不知道TinyXPath技术:它可能是针对尺寸而不是速度进行了优化的?