我有一个相当大的 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 个子节点:Header
和EventReport
。而且由于我没有在(非常大的)EventReport
节点下寻找任何东西,我希望这个查询会非常快。
此外,如果我将示例 XML 缩小为仅包含几个SomeEvent
节点,则此查询几乎会立即返回。
这是 TinyXPath 的已知限制吗?有没有更好的方法来构建我的查询以及时返回?