2010-04-29 122 views
3

我需要根据文档评估多个XPath表达式。文档很大,所以我们使用流式解析器。 XPath表达式只是返回节点的值。我需要对XPath表达式进行排序,以便它们按文档顺序排列(因为一旦我评估了表达式,就会从文档中找到最后一个值的位置开始评估下一个表达式)。我有该文档的架构,但我不确定如何使用它来建立订单。将XPath表达式按文档顺序排序

我在.NET 4中使用C#,如果有问题的话。如果有人能指引我正确的方向,我会很感激!

跟随:正如Dimitre指出的,这对于完整的XPath是不可能的。通过将表达式限制为XML Signature Streaming Profile,我能够构建一棵树,每个节点都包含元素名称和序号位置(它在模式中出现的顺序)。一旦我建立了树,然后我用XPath遍历它,收集列表中的位置。一旦我有了职位清单,就很容易比较清单并确定相对职位。

回答

1

如果不对XPath表达式产生某些限制,则无法实现此功能。

例如,包含轴descendant::descendant-or-self::ancestor::ancestor-or-self::preceding::following::甚至轴preceding-sibling::following-sibling::任何XPath表达式 - 可能需要完全读取XML文档。

万一XPath表达式不包含这些轴,您可以通过位置的步数安排他们(他们也不能含有parent::..),你可以暂时停止评估任何表情其中位置路径的数量小于当前深度。