当前位置:  开发笔记 > 编程语言 > 正文

如何使用XPath执行不区分大小写的搜索并支持非英语字符?

如何解决《如何使用XPath执行不区分大小写的搜索并支持非英语字符?》经验,为你挑选了2个好方法。

我正在使用以下代码在XML文件中执行搜索:

$result = $xml->xpath("//StopPoint[contains(StopName, '$query')]");

其中$ query是搜索查询,StopName是公共汽车站的名称.问题是,它区分大小写.

不仅如此,我还可以搜索ÆØÅæøå等非英语字符来返回挪威名字.

这怎么可能?



1> Tomalak..:

在XPath 1.0中(我相信,PHP SimpleXML可以获得最好的效果),您必须使用该translate()函数从混合大小写输入生成全小写输出.

为方便起见,我将它包装在这样的函数中:

function findStopPointByName($xml, $query) {
  $upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"; // add any characters...
  $lower = "abcdefghijklmnopqrstuvwxyzæøå"; // ...that are missing

  $arg_stopname = "translate(StopName, '$upper', '$lower')";
  $arg_query    = "translate('$query', '$upper', '$lower')";

  return $xml->xpath("//StopPoint[contains($arg_stopname, $arg_query)");
}

作为一种消毒措施,我要么完全禁止或转义单引号$query,因为如果它们被忽略,它们将破坏你的XPath字符串.



2> vartec..:

在XPath 2.0中,您可以使用lower-case()可识别unicode的函数,因此它可以很好地处理非ASCII字符.

contains(lower-case(StopName), lower-case('$query'))

要访问XPath 2.0,您需要XSLT 2.0解析器.例如SAXON.您可以通过JavaBridge 从PHP访问它.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有