首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >银光中的XPathNavigator

银光中的XPathNavigator
EN

Stack Overflow用户
提问于 2010-03-14 18:59:19
回答 3查看 1.3K关注 0票数 1

我有一个代码库,它大量使用XPathNavigator来解析一些特定的xml文档。xml文档是交叉引用的,这意味着元素可以引用解析过程中尚未遇到的另一个元素:

代码语言:javascript
复制
<ElementA ...>
    <DependentElementX id="1234">
</ElementA>

<ElementX id="1234" .../>

文档看起来并不像这样,但重点是: 1)有一个xml模式强制执行整个文档结构,2)文档中的元素可以使用某些in相互引用,3)文档中的不同元素之间有相当多的交叉引用。

该文件分两个阶段进行分析。在第一遍中,我浏览了文档。

代码语言:javascript
复制
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,我所需要的只是一种方式,在我的文档中的书签位置,并返回到它们,以便我可以继续迭代从我停止的地方。

提前感谢你的帮助/想法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-14 21:37:51

您没有遗漏一些显而易见的东西,在Silverlight版本的库中没有XPathNavigator或XPathDocument的实现。

“最好的方法”是高度主观的,这将取决于真正依赖于XPathNavigator的代码行数。然而,我看到了几个选择。

  • 继续使用XDocument、XElement等从System.Xml.Linq名称重新编写代码。这可能并不像你想的那样糟糕。
  • 将Xml对象包装在实际使用的XPathNavigator属性和方法的自己实现中。应该不会太难针对Xml对象重新创建XPathNavigator的大部分特性。然后,您可以在自己的XPathNavigator上运行现有代码。
票数 1
EN

Stack Overflow用户

发布于 2010-04-22 19:27:47

XPath (xdoc.XPathSelectElements)可在Silverlight 4:这里有一个在线测试工具中使用。

票数 1
EN

Stack Overflow用户

发布于 2010-03-14 21:37:24

有很多种方法:如何在C#中处理XML

您仍然可以将Linq用于XML,只需减去linq语法,并使用Linq扩展方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2443333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档