c# - XPath 查找所有匹配项 C# XmlDocument

标签 c# xpath xmldocument

我正在尝试弄清楚如何在 XmlDocument 中找到字符串的所有匹配项。

XmlNodeList results 
      = document.SelectNodes("Products/Product/fn:matches(.,'" + SearchWord + "')");

我正在尝试比较 Product 的 innerText

虽然上面的例子不起作用,但我想我使用 XPath 函数的方式是非常错误的。

最佳答案

计算这个 XPath 1.0 表达式(您知道吗 matches() 是一个 XPath 2.0 函数,在 .NET 中不受支持):

Products/Product/descendant::*[contains(text(), 'YourSearchWord')]

这会选择所有具有包含字符串 'YourSearchWord' 的 text-node-child 并且是 Product 元素的后代的所有元素,该元素是 Product 元素的子元素Products 元素,它是当前(上下文)节点的子元素。

您可以用组成XPath表达式:

string.Format("Products/Product/descendant::*[contains(text(), '{0}')]", 
              SearchWord )

但是,如果 SearchWord 是从用户输入中获取的,建议不要像上面那样将其包含在骨架字符串中,这样可以避免 XPath 注入(inject)。

如果是这种情况,推荐的方法是有一个预编译的 XPath 表达式,其中用户输入将被引用为一个变量,这个变量的值将从 XPath 评估上下文中使用。

可以在这个答案中找到有关如何防止 XPath 注入(inject)的更多详细信息:

https://stackoverflow.com/a/6393690/36305

关于c# - XPath 查找所有匹配项 C# XmlDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9087893/

相关文章:

c# - Visual Studio 2010 无法打开 Visual Studio 2012 修改过的 2010 解决方法

c# - 有条件的或在 C# 中

c# - 更改 eBay 页面内容/DOM 的最简单方法

xpath - wso2 ESB中的字符串填充是否有任何XPath表达式?

c# - WiX:在卸载时正确删除非空的临时文件和文件夹

xml - 如何在带有 XSLT 的 XML 文档中获取根元素的标签名称?

xpath - 可以用 Saxon 处理 XHTML 吗?

java - 无法获取 XML 标记值

xml - SelectNodes 返回 0 个元素

c# - 为什么我的 XmlDocument.Save() 失败并返回 "Resource in use by another process"?