我有一個代碼庫,它大量使用XPathNavigator來解析某些特定的xml文檔。 XML文檔交叉引用,這意味着一個元素可以解析過程中引用另外一個還沒有遇到:Silverlight中的XPathNavigator
<ElementA ...>
<DependentElementX id="1234">
</ElementA>
<ElementX id="1234" .../>
該文件並沒有真正看起來是這樣,但問題是:1)有一個強制執行整個文檔結構的xml模式,2)文檔中的元素可以使用一些ID相互引用,3)文檔中不同元素之間有很多這樣的交叉引用。
該文檔分兩個階段進行解析。在第一遍我通過文檔
XPathDocument doc = ...;
XPathNavigator nav = doc.CreateNavigator();
nav.MoveToRoot();
nav.MoveToFirstChild()...
偶爾「書籤」的當前位置(元件)在文檔中使用XPathNavigator.Clone()方法行走。這給了我一個XPathNavigator的輕量級實例,我可以將其存儲在某處並稍後用於跳回到文檔中的特定位置(元素)。
一旦我在第一遍中收集了足夠的信息(例如,我確定確實有一個id爲'1234'的ElementX),我跳回到保存的書籤(使用保存的XPathNavigators)並完成解析。
好吧,現在我即將在Silverlight 3.0中使用這個庫,而我的恐懼XPathNavigator不在System.Xml程序集中。
問題:
1)我失去了一些東西很明顯(即不XPathNavigator的一些形狀或形式存在,例如在一個工具包或免費庫)?
2)如果我必須在代碼中進行修改,那麼最好的方法是什麼?理想情況下,我想對進行最小更改,而不是重寫代碼的80%,以便能夠使用XLinq之類的東西。
要恢復,萬一我不得不放棄XPathNavigator,我只需要一種方法來在我的文檔中爲地點添加書籤,並返回給他們,以便我可以繼續從我離開的地方迭代。
在此先感謝您的任何幫助/想法。
你不能擁有一切。微軟在SilverLight框架中保留了多少種解析XML的方法? – 2010-03-14 19:01:41
IIRC,.NET框架附帶兩個XPathNavigator實現,一個在標準的W3C DOM實現(XmlNode)上運行,另一個在XPathDocument上運行。 XPathDocument在Silverlight中可用,所以我不太確定爲什麼XPathNavigator不在那裏..? – vladimir 2010-03-14 19:09:08
錯誤,XPathDocument也不存在。我想我必須顯着修改代碼。 – vladimir 2010-03-14 20:00:24