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
Xml XPath |创建在属性中查找关键字的表达式-不区分大小写_Xml_Xpath_Translate_Case Insensitive_Contain - Fatal编程技术网

Xml XPath |创建在属性中查找关键字的表达式-不区分大小写

Xml XPath |创建在属性中查找关键字的表达式-不区分大小写,xml,xpath,translate,case-insensitive,contain,Xml,Xpath,Translate,Case Insensitive,Contain,我有只包含一些节点的XML文件。无论如何,节点有很多属性。 我正在查询包含特定关键字的属性 String expression = "/posts/row[@PostTypeId='1' and @*[contains(.,'Security')]]"; 这很好,但只能找到与大写字母“S”的精确匹配。 我想让用户提供关键字,他们是否只使用小写,这不在我的手中。我想做的是使用 //posts/row[translate(@*, ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’, ‘abc

我有只包含一些节点的XML文件。无论如何,节点有很多属性。 我正在查询包含特定关键字的属性

String expression = "/posts/row[@PostTypeId='1' and @*[contains(.,'Security')]]";
这很好,但只能找到与大写字母“S”的精确匹配。 我想让用户提供关键字,他们是否只使用小写,这不在我的手中。我想做的是使用

//posts/row[translate(@*, ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’, ‘abcdefghijklmnopqrstuvwxyz’)]
将XML端的所有内容以及关键字都降为小写,并将这两种尝试合并到一个表达式中

这是我的尝试,但不起作用

String expression = "/posts/row[@*[contains(translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '" + keyword + "')]]";
有人能帮我吗?我的尝试完全错了吗

提前感谢,, 博多


看起来我可以用下面的方法来解决这个问题

String expression = "/posts/row[@PostTypeId='1' and @*[contains(translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '" + keyword + "')]]";

我不知道是什么让它现在起作用,所以任何人都可以解释一下吗?

你很接近,但你提到将关键字转换为小写,但从未这样做。您必须应用
translate
两次。为了更好的可读性,我添加了一些空格,您可以将所有内容再次放在一行中(当然,还可以用您使用的字符串连接替换
$keyword
):


请确保不要忘记任何非ascii字符,如德语umlauts或其他口音!实现这样的关键字可能会让人恼火。XPath 2.0知道支持unicode的
小写(…)

谢谢您的回答。关于关键词你是对的。我忘了提到,在使用Java字符串方法检查相似性之前,我已经这样做了。
/posts/row[
  @PostTypeId='1' and @*[
    contains(
      translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
      translate($keyword, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')
    )
  ]
]