PHP,xdom,php命名空间和小写

时间:2016-08-16 23:37:25

标签: php xpath

您好,

所以,我正在使用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" />

所以,正如你所看到的,我们有一些大写的名字,一些小写的名字,还有一些大写的第一个字母。

  1. 大写的语言,
  2. 以大写字母分发,
  3. 大写的机器人
  4. 作者小写
  5. 并用首字母大写分类。
  6. 所以,因为我使用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;

    亲切的问候,克里斯。

1 个答案:

答案 0 :(得分:0)

好的,无论是@Robbie Averill给我一个超级密码的答案,还是在阅读Robbie的建议时我有一个有趣的想法。

方法是在帖子中修改这些函数的版本,或直接使用这些函数,使用PHP常用数组搜索函数而不是xdom选择器查找数组中的dom ...我会写这个函数以防我找不到它。