如何使Xpath 1.0查询不区分大小写

时间:2016-12-30 10:24:13

标签: php xpath domdocument case-insensitive

在PHP中,我目前正在进行xpath查询,但我需要使其不区分大小写。 我使用的是XPath 1.0,根据我的查询意味着我必须使用一些称为翻译功能的东西,但我不确定如何做到这一点。

这是我的查询测试PHP文件:

$html = <<<'HTML'
<html>
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <meta NAME="Description" content="Test Case">
    <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
    <Link Rel="Canonical" href="http://www.testsite.com/" />
    <Title>My Title</Title>
</head>
<Body>
Test  Case
</Body>
</html>
HTML;

$domDoc = new DOMDocument();
$domDoc->loadHTML('<?xml encoding="utf-8" ?>' . $html);

// Canonical link
$xpath = new DOMXPath($domDoc);
$canonicalTags = $xpath->query('//link[@rel=\'canonical\']'); // Return nothing
//some use translate(WhatVariable?, 'ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞŸŽŠŒ', 'abcdefghijklmnopqrstuvwxyzàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿžšœ')

var_dump($canonicalTags);

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:2)

基本上,translate用于将需要比较的动态值转换为全部小写(或全部大写)。在这种情况下,您希望将translate()应用于rel属性值,并将结果与​​小写文字"canonical"进行比较(为便于阅读而格式化):

//link[
    translate(@rel, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'canonical'
]