栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在PHP中不区分大小写的xpath搜索

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在PHP中不区分大小写的xpath搜索

如果您选择使用Gordon在XPath中使用PHP函数的建议,将会更加灵活。然而,出乎他的回答中,

translate
字符串函数 XPath
1.0中可用,因此,这意味着你可以使用它; 你的问题是 如何

首先,查尔斯在对问题的评论中指出了明显的错别字。然后是您尝试匹配文本值的逻辑。


在单词形式中,您当前正在问:“ 文本是否包含关键字的小写形式? ”这并不是您真正要问的。相反,问:“ 小写文本是否包含小写关键字?
”将其翻译回XPath-land(请原谅):

(注意:为了便于阅读,截断了字母)

//line[contains(translate(text(),'ABC...Z','abc...z'),'chicago')]

上面的小写字母包含在

line
节点内的文本,然后检查它(小写字母的文本)是否包含关键字
chicago


现在是强制性代码片段(但实际上,上面的 想法 是您真正需要带回家的东西):

$xml    = simplexml_load_file($data);$search = strtolower($keyword);$nodes  = $xml->xpath("//line[contains(translate(text(), 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), '$search')]");echo 'Got ' . count($nodes) . ' matches!' . PHP_EOL;foreach ($nodes as $node){   echo $node . PHP_EOL;}

在 第戎评论后编辑

在foreach中,您可以访问行号,章号和书名,如下所示。

行号
-这只是

<line>
元素上的一个属性,使访问它变得非常容易。使用SimpleXML,有两种方法可以访问它:
$node['number']
$node->attributes()->number
(我更喜欢前者)。

章节编号
-要做到这一点,正如您正确地说的那样,我们需要遍历树。如果我们使用DOM类,我们将拥有一个方便的

$node->parentNode
属性,可直接将我们引向
<chapter>
(因为它是我们的直接祖先
<line>
)。SimpleXML没有这种方便的属性,但是我们可以使用相对的XPath查询来获取它。该父轴允许我们遍历了树。

由于

xpath()
返回数组,我们可以作弊并
current()
用来访问从数组返回的数组中的第一个(也是唯一的)项目。然后,只需访问上述
number
属性即可。

// In the near future we can use: current(...)['number'] but not yet$chapter = current($node->xpath('./parent::chapter'))->attributes()->number;

书籍名称
-这样做的过程与访问章号的过程相同。来自的相对XPath查询

<line>
可以利用祖先轴,例如
./ancestor::book
(或
./parent:chapter/parent::book
)。希望您能弄清楚如何访问其
name
属性。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/426321.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号