4

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、期待どおりに結果が表示されます。

4

1 に答える 1

6

名前空間 ( XML 名前空間thumbを参照)に属する要素を見つけようとしています。という名前のタグではありません。iscisc:thumb

phpQuery は、あなたがしようとしているのとは異なり、名前空間付きの要素を喜んで照会できます。代わりに、単にタグをフォームnamespace|tagname(つまりisc|thumb) で指定します。名前空間を認識できるようにするには、名前空間を phpQuery の XPath ハンドラ (単なる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
于 2010-04-24T22:15:43.877 に答える