【发布时间】:2010-03-14 18:59:19
【问题描述】:
我有一个代码库,它大量使用 XPathNavigator 来解析一些特定的 xml 文档。 xml 文档是交叉引用的,这意味着一个元素可以引用另一个在解析过程中尚未遇到的元素:
<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) 如果我必须对代码进行修改,最好的方法是什么?理想情况下,我希望进行最小 的更改,而不是为了能够使用 Xlinq 之类的东西而重写 80% 的代码。
若要继续,万一我不得不放弃 XPathNavigator,我只需要一种方法来为我的文档中的位置添加书签并返回到它们,以便我可以从中断的地方继续迭代。
提前感谢任何帮助/想法。
【问题讨论】:
-
你不可能拥有一切。微软应该在 SilverLight 框架中保留多少种不同的 XML 解析方式?
-
IIRC,.NET 框架附带了两个 XPathNavigator 实现,一个在标准 W3C DOM 实现 (XmlNode) 上运行,另一个在 XPathDocument 上运行。 XPathDocument 在 Silverlight 中可用,所以我不太清楚为什么 XPathNavigator 也不在那里..?
-
错了,XPathDocument 也不存在。我想我必须对代码进行重大修改。
标签: silverlight xpathnavigator