我需要针对文档评估多个XPath表达式。文档很大,所以我们使用流式解析器。 XPath表达式只返回节点的值。我需要对XPath表达式进行排序,使它们按文档顺序排列(因为一旦我评估了一个表达式,下一个表达式的评估就从文档中找到最后一个值的点开始)。我有文档的架构,但我不确定如何使用它来建立订单。
我正在使用C#和.NET 4,如果这很重要的话。如果有人能指出我正确的方向,我会很感激!
关注:正如Dimitre所说,使用完整的XPath是不可能的。将表达式限制为XML Signature Streaming Profile,我能够构造一个树,每个节点包含元素名称和序数位置(它在模式中出现的顺序)。一旦我构建了树,然后我用XPath遍历它,收集列表中的位置。一旦我得到了仓位清单,就很容易比较清单并确定相对位置。
答案 0 :(得分:1)
如果不对XPath表达式施加某些限制,则无法实现。
例如,包含轴descendant::
,descendant-or-self::
,ancestor::
,ancestor-or-self::
,preceding::
的任何XPath表达式, following::
甚至轴preceding-sibling::
和following-sibling::
- 可能需要完全阅读XML文档。
如果XPath表达式不包含这些轴,您可以按位置步数排列它们(它们也不应包含parent::
或..
),您可以暂时停止评估任何位置路径数小于当前深度的表达式。