2010-04-29 29 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::..),你可以暫時停止評估任何表情其中位置路徑的數量小於當前深度。