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 函数的方式是非常错误的。
评估此 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 注入的更多详细信息,请参阅此答案: