Xml XPath |创建在属性中查找关键字的表达式-不区分大小写
我有只包含一些节点的XML文件。无论如何,节点有很多属性。 我正在查询包含特定关键字的属性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
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')
)
]
]