问题标签 [xpathnavigator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2223 浏览

c# - 在 C# 中实现我自己的 XPathNavigator

我正在寻找派生自 Microsoft 的 XPathNavigator 类的类的 C# 示例实现。有人能指点我这样的文章吗?

正如您可能(或可能不)知道的那样,XmlNavigator 旨在允许在大多数数据模型上叠加 XPath 导航。

我已经实现了我的派生 XPathNavigator 类,它运行良好。很好,除了递归搜索的 XPath 表达式,即“//*”。

我很确定我在 Clone、MoveToFirstChild 或 MoveTo overides 中有一个微妙的错误,我认为如果存在另一个示例可能会有所帮助。

另外,我确信我已经看过讨论这个问题的杂志文章。事实证明,我的搜索一无所获。也许有人记得这样的文章。

0 投票
2 回答
4189 浏览

c# - 解析 XPath 表达式

我正在尝试为 XPath 创建一个“AET”(抽象表达式树)(因为我正在编写一个 WYSIWYG XSL 编辑器)。在过去的三到四个小时里,我一直在用 XPath BNF 撞墙。

我想到了另一种解决方案。我想我可以编写一个实现 IXPathNavigable 的类,它在调用 CreateNavigator 时返回我自己的 XPathNavigator。这个 XPathNavigator 在任何方法调用上总是会成功,并且会跟踪这些调用——例如,我们移动到客户节点,然后是客户节点。然后我可以(希望)使用这些信息来创建“AET”(这样我们现在就可以在对象模型中拥有客户/客户了)。

唯一的问题是:我到底如何通过 XPathExpression 运行IXPathNavigable

我知道这太懒了。但是有没有其他人经过努力并编写了 XPath 表达式解析器?我还没有对我可能的解决方案进行 POC,因为我无法对其进行测试(因为我无法针对 IXPathNavigable 运行 XPathExpression),所以我什至不知道我的解决方案是否会起作用。

0 投票
14 回答
80749 浏览

c# - 在 C# 中使用具有默认命名空间的 Xpath

我有一个带有默认命名空间的 XML 文档。我正在使用 XPathNavigator 使用 Xpath 选择一组节点,如下所示:

我没有得到任何结果:我假设这是因为我没有指定命名空间。如何在我的选择中包含命名空间?

0 投票
1 回答
469 浏览

.net - 是否可以从 XPathNavigator 检索原始 XML?

我有一个 XML 文档,想做语法高亮。

该代码使用XPathDocumentXPathNavigatorXPathNodeIterator。调用Select()后,如何获取 XML 文档中的原始文本?

对我来说,它也可以获取所选节点的开头和结尾的IXmlLineInfo。现在我可以移动到所选节点的开头并为此获取 IXmlLineInfo。但我只知道如何移动到下一个节点(MoveToNext());不知道如何移动到当前节点的末尾。如果所讨论的节点是序列中的最后一个(没有兄弟姐妹),这种方法也不起作用。

如果有一些 xpath 表达式返回当前节点的完整原始文本,它也会起作用。到目前为止,我也找不到类似的东西。


编辑:我通过一个无耻的黑客解决了这个问题。为了确定需要突出显示的文本的长度,我手动解析原始 xml 文本,搜索尖括号和名称标记。它不是很漂亮,但在没有更好的东西的情况下,它适用于简单的 XML 文件。

我仍然对真正的答案感兴趣,如果有人有的话。

0 投票
1 回答
2051 浏览

xml - 无法通过 XPathNavigator 读取 xml

这是我的代码,我不知道为什么我不能通过 XPathNavigator 读取数据。但是在我添加命名空间和架构之前就已经很好了。

XML:

和架构:

0 投票
1 回答
3472 浏览

.net - 为什么我必须将空名称空间传递给 XPathNavigator.GetAttribute?

给定以下 XML 标记:

和一个XPathNavigator定位在<child>元素上,

产生奇怪的结果:withNs是空的,withoutNs包含foo.

这是为什么?我本来希望它会反过来,因为name属性必须Demochild元素一样位于命名空间中。

MSDN 文档没有提到 pass 的任何神奇含义namespaceURI="",所以我假设您必须传递属性的真实命名空间 URI。

0 投票
2 回答
2723 浏览

c# - 无法让 .NET XPathNavigator 工作

我在使用 XPathNavigator 时遇到问题。我有一个文档,其中包含流中没有命名空间的一堆“主题”元素。

我正在使用(表达被简化到最低限度,首先我认为我的表达是错误的):

这行不通。我可以选择*/*/*或类似的东西并让我的“主题”元素正常。我尝试在在线测试器和其他语言中运行我的表达式并且它们有效。

问:怎么了?我一直怀疑它与被诅咒的 NamespaceManager 对象有关,每次我用命名空间解析文档时都会给我带来难以置信的痛苦,但是这次我正在寻找的元素没有明确的命名空间!我补充说:

并将其作为第二个参数传递给 Select - 无济于事。我应该如何将“”命名空间添加到这个东西/正确使用它?

或者,更好的是,有没有办法在 .NET 中使用 XPath,而不像在其他语言中那样使用这种可怕的可憎的类?如果我想要命名空间,我可以将它们写在表达式中......

更新:我想出了一个解决方法——从根节点复制/粘贴默认 xmlns,然后使用该命名空间:

但是,我不应该知道默认的 URI,也不喜欢用不必要的 x:-s 污染我的表达式。所以我现在只需要回答问题的第二部分。

0 投票
3 回答
1310 浏览

silverlight - Silverlight 中的 XPathNavigator

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

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

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

偶尔会使用 XPathNavigator.Clone() 方法为文档中的当前位置(元素)添加书签。这给了我一个轻量级的 XPathNavigator 实例,我可以将它存储在某个地方,然后使用它跳回到我文档中的特定位置(元素)。

一旦我在第一遍中收集了足够的信息(例如,我确定确实有一个 id='1234' 的 ElementX),我跳回保存的书签(使用那些保存的 XPathNavigator)并完成解析。

好吧,现在我将在 Silverlight 3.0 中使用这个库,令我恐惧的是 XPathNavigator 不在 System.Xml 程序集中。

问题:

1) 我是否遗漏了一些明显的东西(即 XPathNavigator 确实以某种形式或形式存在,例如在工具包或免费软件库中)?

2)如果我必须对代码进行修改,最好的方法是什么?理想情况下,我希望进行最小的更改,而不是为了能够使用 Xlinq 之类的东西而重写 80% 的代码。

要恢复,万一我不得不放弃 XPathNavigator,我所需要的只是一种方法来为我的文档中的位置添加书签并返回到它们,以便我可以从我离开的地方继续迭代。

提前感谢您的任何帮助/想法。

0 投票
2 回答
2158 浏览

c# - 需要有关在 C# 中使用 XPathNavigator 的帮助吗?

我的 XML 文件如下。它混合了模式和普通元素。

我的 C# 代码如下。我想循环元素(通过传递模式的所有内容)

<EquipmentConstants xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

你能给我一些建议吗?谢谢你。

0 投票
1 回答
360 浏览

sum - xPath 评估与 XPathNodeIterator

我正在寻找在一个巨大的 xml 文件(120MB)中计算一些标签的最快方法

有什么建议么?

提前问候和感谢