Выбор своеобразных тегов XML с помощью phpQuery - PullRequest
4 голосов
/ 25 апреля 2010

phpQuery - действительно хороший инструмент, который мне очень помог в прошлом разборе правильно сформированных документов XHTML и XML, но недавно я столкнулся с проблемой, пытаясь выбрать элементы с двоеточиями в своем тэге , такие как следующее:

<isc:thumb><![CDATA[http://example.com/foo_thumb.jpg]]></isc:thumb>

Я пытался использовать функцию pq(), чтобы выбрать все эти элементы:

foreach ( pq("isc:thumb") as $thumbnail ) {
  print pq( $thumbnail )->text();
}

К сожалению, это ничего не делает. Если я попробую другой элемент, например тэг id, результаты появятся, как и ожидалось.

1 Ответ

6 голосов
/ 25 апреля 2010

Вы пытаетесь найти элемент thumb, который принадлежит пространству имен isc (см. Пространство имен XML ); не тег с именем isc:thumb.

phpQuery может с радостью запрашивать элементы пространства имен, просто не так, как вы пытаетесь это сделать. Вместо этого просто предоставьте тег в форме namespace|tagname (т.е. isc|thumb). Также стоит отметить, что пространство имен должно быть зарегистрировано с помощью обработчика XPath phpQuery (который является просто DOMXPath объектом), чтобы оно могло распознавать пространство имен.

Вот краткий пример с примером XML-документа (очевидно, используйте свой собственный XML и обязательно предоставьте правильный URI пространства имен).

phpQuery::newDocumentXML('<root xmlns:isc="urn.example.isc">
  <isc:thumb><![CDATA[http://example.com/foo_thumb.jpg]]></isc:thumb>
  <isc:thumb><![CDATA[http://example.com/bar_thumb.jpg]]></isc:thumb>
</root>
');
phpQuery::getDocument()->xpath->registerNamespace('isc', 'urn.example.isc');
foreach ( pq("isc|thumb") as $thumbnail ) {
    echo pq( $thumbnail )->text() . PHP_EOL;
}

Какие выходы:

http://example.com/foo_thumb.jpg
http://example.com/bar_thumb.jpg
...