2016-08-16 2 views
1

Привет,PHP, XDOM, PHP имен и строчными

Итак, я работаю с PHP и XDOM, и у меня есть эти 2 выражения:

$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. и классификация с первой заглавной буквой.

Так что, как я использую 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-> title = $ node-> xdom-> query ('// title') -> item (0) -> nodeValue;

вид привет, крис.

+2

Для Godsake, пожалуйста, кто-то делает библиотеку для xdom 2.0 для PHP –

+0

Связанные: http://stackoverflow.com/questions/14553547/what-is-the-best-php-dom-2-array-function –

+0

Спасибо Робби, но как это связано? вы предлагаете мне использовать эту настраиваемую функцию «xml2array()»? Я жалуюсь на отсутствие чувствительности к регистру при реализации PHP Xdom. Поскольку лучший подход, о котором я могу думать до сих пор, заключается в том, чтобы уменьшить размер всего xdom, прежде чем делать поиски –

ответ

0

Хорошо, в любом случае @Robbie Averill дал мне супер-зашифрованный ответ, или у меня была интересная идея, читая рекомендацию Робби.

Подход состоял в том, чтобы внести измененную версию этих функций в сообщение или использовать эти функции напрямую, чтобы найти dom в массиве, используя функции поиска общего массива PHP вместо селекторов xdom ... I ' Запишите функцию в случае, если я ее не найду.

+1

http://fsockopen.com/php-programming/your-final-stop-for-php-xpath-case-insensitive Спасибо @Robbie –

Смежные вопросы