Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net &引用;“代码重用”;在XPath表达式中_.net_Xpath - Fatal编程技术网

.net &引用;“代码重用”;在XPath表达式中

.net &引用;“代码重用”;在XPath表达式中,.net,xpath,.net,Xpath,背景:我正在使用HtmlAgilityPack(.Net),所以我不得不使用XPath1.0 我正在尝试查找具有包含foo作为一个完整单词的属性的所有节点。 示例: “福”赛 “我的福”比赛 “富吧”比赛 “福”赛 “ifoo”不匹配 “食物”不是对手 这就是我所拥有的(XPath 1.0中也没有以结尾的): 根据,我可以使用这种可怕的方法来降低搜索条件的大小写: translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuv

背景:我正在使用HtmlAgilityPack(.Net),所以我不得不使用XPath1.0

我正在尝试查找具有包含
foo
作为一个完整单词的属性的所有节点。
示例:

  • “福”赛
  • “我的福”比赛
  • “富吧”比赛
  • “福”赛
  • “ifoo”不匹配
  • “食物”不是对手
这就是我所拥有的(XPath 1.0中也没有以结尾的
):

根据,我可以使用这种可怕的方法来降低搜索条件的大小写:

translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')
最后,我的问题是:如何使用
translate
函数,同时尽可能保持表达式的简短和可读性?

(奖励:我如何在不同的表达之间分享这个呢?

怎么样?

只需使用(Tomalak答案的摘要版本):

警告

切勿在XPath表达式占位符中插入未知代理(最终用户)接收的字符串。这将为打开一个大洞


推荐的做法是使用已编译的XPath表达式,并在完成计算时将用户提供的字符串作为参数传递(或XPath表达式中的

您所说的“如何在不同的表达式之间共享此值”是什么意思?Tomalak很好地回答了其余的问题——使用sentinel方法是编程中众所周知的技术。谢谢——现在好多了。。。我用的是常数,所以我不怕打针(不是‘foo’。@塞尔达里:不客气。我真的建议在上下文中使用编译后的XPath表达式+函数/变量。
translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')
//@*[contains(concat(' ', 
                     translate(normalize-space(), 'FOO', 'foo'), 
                     ' '), 
              ' foo '
              )
    ]