8

こんにちは、次のような一連のアイテムを含む xml 形式の API 応答があります。

<item>
<title>blah balh</title>
<pubDate>Tue, 20 Oct 2009 </pubDate>
<media:file  date="today" data="example text string"/>
</item>

DOMDocument を使用して、タグ「media:file」から属性「data」を取得したいと考えています。以下の私の試みはうまくいきません:

$xmldoc = new DOMDocument();
$xmldoc->load('api response address');
foreach ($xmldoc->getElementsByTagName('item') as $feeditem) {
$nodes = $feeditem->getElementsByTagName('media:file');
$linkthumb = $nodes->item(0)->getAttribute('data');
}

私は何を間違っていますか?助けてください。

編集: マーク、何らかの理由でコメントを残すことができません。エラーが発生します

 Call to a member function getAttribute() on a non-object

コードを実行すると。私も試してみました

$nodes = $feeditem->getElementsByTagNameNS('uri','file');
$linkthumb = $nodes->item(0)->getAttribute('data');

ここで、uri はメディア ネーム スペース (NS) に関連する uri ですが、これも同じ問題です。

通常、属性の解析には問題がないため、メディア要素の形式は not であることに注意してください。これは問題の一部だと思います。

4

2 に答える 2

10

あなたが提供した例は、エラーを生成するべきではありません。私はそれをテストし、 $linkthumb には期待どおりの文字列「example text string」が含まれていました

返された XML でメディアの名前空間が定義されていることを確認してください。定義されていない場合、DOMDocument はエラーになります。

特定のエラーが発生した場合は、投稿を編集してエラーを含めてください

編集:

次のコードを試してください。

$xmldoc = new DOMDocument();
$xmldoc->load('api response address');
foreach ($xmldoc->getElementsByTagName('item') as $feeditem) {
    $nodes = $feeditem->getElementsByTagName('file');
    $linkthumb = $nodes->item(0)->getAttribute('data');
    echo $linkthumb;
}

XML を DOMDocument よりもはるかに読みやすくするため、 SimpleXMLXpathも参照することをお勧めします。

于 2009-10-21T00:29:34.400 に答える
3

あるいは、

$DOMNode -> attributes -> getNamedItem( 'MyAttribute' ) -> value;
于 2009-10-21T02:08:06.120 に答える