0

我有一个相当大的 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 的已知限制吗?有没有更好的方法来构建我的查询以及时返回?

4

1 回答 1

0

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

于 2015-01-28T08:32:58.180 回答