XPath 查找所有匹配项 C# XmlDocument

use*_*508 4 c# xpath xmldocument

我想弄清楚如何找到 .a 中字符串的所有匹配项XmlDocument

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

我正在尝试比较innerText产品。

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

Dim*_*hev 5

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

Products/Product/descendant::*[contains(text(), 'YourSearchWord')]
Run Code Online (Sandbox Code Playgroud)

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

您可以使用以下方式编写 XPath 表达式

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

但是,如果SearchWord从用户输入中获取,建议不要将其包含在上述骨架字符串中,以便避免 XPath 注入。

如果是这种情况,建议的方法是使用预编译的 XPath 表达式,其中用户输入将作为变量引用,并且将从 XPath 计算上下文中使用该变量的值。

有关如何防止 XPath 注入的更多详细信息,请参阅此答案

/sf/answers/447558331/