600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > php搜索区分大小写 在php中搜索不区分大小写的xpath

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

时间:2024-07-21 15:57:45

相关推荐

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

如果您选择使用,那么Gordon建议在XPath中使用PHP函数将更加灵活.但是,与他的回答相反,翻译字符串函数在XPath 1.0中可用,这意味着您可以使用它;你的问题是怎么回事.

首先,查尔斯在对这个问题的评论中指出了明显的错字.然后就是你如何尝试匹配文本值的逻辑.

在单词形式中,您当前会问,“文本是否包含关键字的小写形式?”这不是你想要的.相反,问一下,“小写文本是否包含小写关键字?”翻译(原谅双关语)回到XPath-land将是:

(注意:截断的字母表是为了便于阅读)

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

以上小写包含在行节点中的文本,然后检查它(小写文本)是否包含关键字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查询来获取它. parent axis允许我们遍历树.

由于xpath()返回一个数组,我们可以作弊并使用current()来访问从它返回的数组中的第一个(也是唯一的)项.然后,只需访问上面的数字属性即可.

// In the near future we can use: current(...)['number'] but not yet

$chapter = current($node->xpath('./parent::chapter'))->attributes()->number;

书名 – 此过程与访问章节号的过程相同.来自< line>的相对XPath查询可以使用像./ancestor::book(或./parent:chapter/parent::book)这样的ancestor axis.希望您能弄清楚如何访问其name属性.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。