0
<item>
    <title>Avoid tornado death by spinning backwards</title>
    <link>www.example.com/survival_tips</link>
    <pubDate>Mon, 13 Aug 2043 00:16:21 +0000</pubDate>
    <dc:creator>Helen Hunt</dc:creator>
    <description></description>
    <content:encoded></content:encoded>
    <category domain="post_tag" nicename="surv"><![CDATA[Survival]]></category>
    <category domain="category" nicename="tip"><![CDATA[Tips]]></category>
    <category domain="category" nicename="torn"><![CDATA[Tornados]]></category>
</item>

上記の XML を検討してください。次の方法でタイトルに簡単にアクセスできます。

$feed = simplexml_load_string($xml);

foreach ($feed->channel->item as $entry) {
     echo $entry->title.", ";
}

<category...>すべてのフィールドでそれを行うにはどうすればよいですか? (親タグでラップされていればこれができると思います<Categories>が、そうではありません。

期待される出力:Survival, Tips, Tornados

4

2 に答える 2

2

この特定のケースでは、関数Docscategoryを介して要素を配列として取得することをお勧めします。SimpleXMLElement::xpath

foreach ($feed->channel->item as $entry) {
    echo $entry->title . ", " . implode(', ', $entry->xpath('category'));
}

これは、単一のサンプルアイテムに与えられます:

Avoid tornado death by spinning backwards, Survival, Tips, Tornados

そして完了。;) implodeDocsも参照してください。

于 2013-01-10T13:51:32.897 に答える
1

編集

「アイテム」ループ内の反復を反映するように更新

foreach ($feed->channel->item as $entry) {

    $categories = array();
    foreach ($entry->category as $category) {
        $categories[] = (string) $category;
    }

    echo 'In ', $entry->title, ': ', implode(', ', $categories);
}

例 #4 SimpleXML の一意でない要素へのアクセスを参照してください。

于 2013-01-10T01:48:51.670 に答える