问题标签 [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 回答
616 浏览

xml - 在 .net 2 中解析 XML 结构

我有以下 xml 片段

我正在尝试检索具有 c1="XXX" 和 c2="ZZZ" 的转换器的“购买”属性中的数字值。

不幸的是,我不能使用 linq to XML,否则这很容易(对我来说)。所以我想我被困在使用 xpath

我创建了一个 XPathNavigator,但无法获得获得我想要的值的语法

任何人,任何想法如何做到这一点?

0 投票
2 回答
120 浏览

xml - XPath 谓词问题

我有一个带有谓词的 XPath 表达式,它使用 XPathNavigator.Select 方法从嵌套元素中选择一个人的姓名和 ID。

这有效:

这也有效:

当我将谓词提升到一个新的水平时,它不起作用:

我没有得到任何过滤,而是整个集合。

这是由于 XPath、ASP.NET 中固有的限制,还是我在做一些愚蠢的事情?

以下是相关 XML 文件的片段:

0 投票
3 回答
2205 浏览

xpath - 如何使 XPath 表达式更通用?

我有一个导航树的 xpath 表达式,其中包含一些可以添加的子分支:

我需要使它类似于下面给出的通用语句,但无法做到

有人能解释一下吗?

从评论更新

我可以在第一个表达式中看到 3 个子节点[ div[1],在第二个表达式中看到 div[2],在第三个表达式中看到 div[3]] 所以我不想写到 div[100] 我想把它作为 div[%d ] 但我不能这样做

0 投票
3 回答
1533 浏览

c# - 使用 Xpath Navigator 添加 XMl 属性(如果不存在)

我只想在属性不存在时添加属性。

0 投票
1 回答
194 浏览

.net - 我可以使用从一个导航器编译的 XPathExpression 和不同的导航器吗?

如果我得到一个 XPathNavigator,并用它来编译一个 XPathExpression exp,那么我可以使用 exp 的方式有什么限制?我可以将 exp 与不同的导航器一起使用吗?我知道它可以运行,并且即使编译的 XPathNavigator 是由与 Evaluating XPathNavigator 非常不同的文档或节点形成的,它似乎也能给出正确的结果。但我不知道它是否安全。

这是我的意思的基本示例。这很荒谬,但说明了这一点

0 投票
2 回答
1009 浏览

.net - System.Xml.XmlDocument, System.Xml.XPath.XPathNavigator{ReplaceSelf,OuterXml}:替换文档中的占位符

我目前正在维护一个大约一年前为工作编写的 Web 应用程序。基本上,它允许用户创建自定义 XHTML 报告模板。我使用XmlDocument, XPathNavigator, 等。人。用数据验证、清理和替换占位符。

它在大多数情况下都可以正常工作,但我刚刚意识到我实际上并没有用数据替换占位符元素,而是用数据文本替换占位符的文本。

人为的例子:

会成为...

这在过去并不是真正的问题,因为模板只被处理过一次;当用户选择针对一组选定的数据运行它时。但是,现在我们为他们提供了预览结果输出并在打印前对其进行修改的选项。这样做的结果是替换引擎不止一次地处理它:首先生成原始输出,然后再次“打印”修改后的输出。替换引擎找到实际上是数据的占位符,未能找到要替换的相应数据元素,并且处理失败并出现异常。

原始代码使用该XPathNavigator.InnerXml属性将占位符元素的内容从“{CompanyName}”更改为“Castopulence”(例如):

因此,如果我想彻底替换这个占位符元素,我会改用XPathNavigator.OuterXml

这在大多数情况下似乎确实有效,或者至少我认为它有效,但看似随机的替换总是会导致System.InvalidOperationException抛出消息“操作结果没有生成内容”。所以我不确定它们中的任何一个是否有效,但我认为它们是有效的,因为之前的替换不会引发异常。

我真的不知道这意味着什么,而且谷歌只有 4 个结果是异常消息的确切短语,每个结果都是我不会说的语言。谷歌翻译他们没有发现任何相关内容。

实验上我试过XPathNavigator.ReplaceSelf,这似乎完成了同样的事情,但不幸的是,同样的异常从同一个内部调用中抛出。

两种情况下的堆栈跟踪:

在 System.Xml.DocumentXmlWriter.Close(WriteState currentState)
在 System.Xml.XmlWellFormedWriter.Close()
在 System.Xml.XPath.XPathNavigator.ReplaceSelf(XmlReader newNode)
在 System.Xml.XPath.XPathNavigator.ReplaceSelf(String newNode)
...截断私有应用程序符号...

MSDN 参考描述了它引发的ReplaceSelf异常,但引发的唯一System.InvalidOperationException异常是“XPathNavigator 未定位在元素、文本、处理指令或注释节点上”时。在 Visual Studio 调试器中,我可以确认它位于元素上。我的代码同意。指向占位符的XPathNavigator' 实际上是System.Xml.XPath.XPathNodeIterator.Current(所有这些都被添加到列表中,列表被转换为数组,并在替换阶段迭代)。

出了什么问题(异常实际上是什么意思),我该如何解决?

附加:实际上引发异常的类 ( System.Xml.DocumentXmlWriter) 似乎没有记录在 MSDN 上(或者至少,我无法通过 Google 搜索或 MSDN 搜索找到它)。

追加:我已经确定导致问题的一个替换的数据只是一个空格(即" ")。我不明白为什么这可能是一个问题XPathNavigator,但显然它是......似乎也是一个空字符串(即,"")。那么问题可能是试图用只有空格替换一个元素。我不明白为什么这应该是一个问题。

0 投票
1 回答
11241 浏览

c# - 如何使用 XPathNavigator.SelectSingleNode(string xpath) 选择节点?

我有这个 xml 文件“target.xml”:

在 BindCities(string country) 方法中,我试图访问 country 元素 () 但 nav 变量在运行代码后不会将其值更改为 country 元素,它只是停留在最后一个位置。我尝试了很多方法,但没有任何效果。

我需要什么代码才能使用导航 XPathNavigator 到达国家/地区元素?

感谢您的回复!

0 投票
3 回答
2510 浏览

c# - 使用 XpathNavigator 和 HtmlAgilityPack 查找 InnerHtml 值

test.xml 的一部分

//创建 XpathNavigator 以获取 td 中的最后一个值,即 desc9

调试器显示该值可以如下评估,这非常麻烦。

到达 desc9 的最佳方式是什么?

0 投票
0 回答
204 浏览

equivalent - ASP.NET 1.1 - XPathNavigator OuterXml 等效

我正在使用 Google Maps API 在 1.1 中进行 GeoCode 查找,并且遇到了 XPathNavigator 对象的障碍。

我需要创建一个“子导航器”,以便我们可以对节点执行全局 xpath 搜索(例如 //adr:PostalCodeNumber),因为 xml 架构会根据返回的地址的准确性而改变。

这是一个示例响应:

我有这个 2.0 代码块,我正在尝试为 OuterXml 属性找到 1.1 等效项:

我找到了这篇博客文章,但是指向 SerializableXPathNavigator 源的链接已经失效。=(

http://www.tkachenko.com/blog/archives/000155.html

请原谅我的菜鸟,但我将如何使用自己的 OuterXml 方法编写自己的 SerializableXPathNavigator 类?

非常感谢你的帮助。

0 投票
1 回答
478 浏览

c# - 如何使用 Xpath 导航器更新空节点

我有一个这样的 XML

这里的“值”是一个空节点。使用 Xpath 导航器,我能够到达 Value 节点,但无法更新它。使用类似的东西:

谁能给我一些想法如何编辑这个节点,即向它添加可以是字符串路径的值。

最后会附加吗?