您好,
所以,我正在使用PHP和Xdom,我有这两个表达式:
$parsed_node->meta->author = $node->xdom->query('//meta[@name="author"]/@content')->item(0)->nodeValue;
$parsed_node->meta->language = $node->xdom->query('//meta[@name="language"]/@content')->item(0)->nodeValue;
当然,只要网站的作者没有决定在元标记中使用大写字母,两者都完美无缺。
现在,当涉及到某些网站时,您会看到这样的表达式:
<meta name="LANGUAGE" content="es" />
<meta name="DISTRIBUTION" content="Global" />
<meta name="ROBOTS" content="all" />
<meta name="author" content="Clarin.com" />
<meta name="Classification" content="noticias, información, videos, diario, newspaper" />
所以,正如你所看到的,我们有一些大写的名字,一些小写的名字,还有一些大写的第一个字母。
所以,因为我使用PHP并且没有xpath 2.0这样的东西我没有别的选择而不是包含PHP函数:
$node->xdom->registerNamespace('php', 'http://php.net/xpath');
$node->xdom->registerPhpFunctions();
然后我们可以使用像这样的表达式:
$parsed_node->meta->language = $node->xdom->query("//meta[contains(php:functionString('strtolower', @name), 'language')]/@content")->item(0)->nodeValue;
这是我的2个问题
如何应用相同的表达式来使标题不区分大小写?
$ parsed_node-&gt; title = $ node-&gt; xdom-&gt; query(&#39; // title&#39;) - &gt; item(0) - &gt; nodeValue;
答案 0 :(得分:0)
好的,无论是@Robbie Averill给我一个超级密码的答案,还是在阅读Robbie的建议时我有一个有趣的想法。
方法是在帖子中修改这些函数的版本,或直接使用这些函数,使用PHP常用数组搜索函数而不是xdom选择器查找数组中的dom ...我会写这个函数以防我找不到它。