2017-08-18 12 views
0

私はWordpressで表示しているXMLブログフィードを持っています。ここではXMLノードのシンプルな表現です:同じ名前のXMLノードを表示するにはどうすればいいですか?

<item> 
    <title> 
     Some title 
    </title> 
    <description> 
     Some description 
    </description> 
    <category> 
     category 1 
    </category> 
    <category> 
     category 2 
    </category> 
    <category> 
     category 3 
    </category> 
</item> 

ですから、カテゴリノード上に気付くでしょう3回表示されますが、常に同じ名前を持っています。だから私はループ内のXMLノードを表示するために、以下のPHPを使用しているときに私はカテゴリーノードの1つだけを得ることができ、残りは一意ではありません。

誰も私がそれらのカテゴリノードをすべて表示する方法を知っていますか?

<?php 
    $rss = new DOMDocument(); 
    $rss->load('http://blog.com/rss.xml'); 
    $feed = array(); 
    foreach ($rss->getElementsByTagName('item') as $node) { 
     $item = array (
     'title' => $node->getElementsByTagName('title')->item(0)->nodeValue, 
     'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue, 
     'category' => $node->getElementsByTagName('category')->item(0)->nodeValue, 
     ); 
     array_push($feed, $item); 
    } 
    ?> 

<?php 
    $limit = 3; 
    for($x=0;$x<$limit;$x++) { 
    $title = str_replace(' & ', ' &amp; ', $feed[$x]['title']); 
    $description = $feed[$x]['desc']; 
    $category = $feed[$x]['category']; 

    echo $title; 
    echo $desc; 
    echo $category; 
    } 
?> 
+0

タグ名が常に「カテゴリ」の場合は、タグ名 –

答えて

1

保存カテゴリの代わりに、各項目に対して1つのカテゴリ:

<?php 

function domNodeList2Array($node_list) 
{ 
    $nodes = []; 
    foreach ($node_list as $node) { 
     $nodes[] = $node; 
    } 
    return $nodes; 
} 

$rss = new DOMDocument(); 
$rss->load('rss.xml'); 
$feed = array(); 
foreach ($rss->getElementsByTagName('item') as $node) { 
    $item = [ 
     'title' => $node->getElementsByTagName('title')->item(0)->nodeValue, 
     'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue, 
     'categories' => array_map(function ($item) { 
      return $item->nodeValue; 
     }, domNodeList2Array($node->getElementsByTagName('category')))]; 
    array_push($feed, $item); 
} 


$limit = 1; 
for ($x = 0; $x < $limit; $x++) { 
    $title = str_replace(' & ', ' &amp; ', $feed[$x]['title']); 
    $description = $feed[$x]['desc']; 
    $categories = $feed[$x]['categories']; 

    echo $title; 
    echo $description; 
    foreach ($categories as $category) { 
     echo $category; 
    } 
} 
-1

あなたは配列を返す "simplexml_load_file" を使用することができます。

$xml = simplexml_load_file('http://blog.com/rss.xml'); 

$results = $xml->xpath('//category'); 

var_dump($results); 
1

いつも最初の要素([0]を使用)を取っているので、これは常に最初のカテゴリを選択します。 foreachを追加するだけであれば、すべてを追加できます。

$rss = new DOMDocument(); 
$rss->load ('rss.xml'); 
$feed = array(); 
foreach ($rss->getElementsByTagName ('item') as $node) { 
    $item = array (
      'title' => $node->getElementsByTagName ('title')->item (0)->nodeValue, 
      'desc' => $node->getElementsByTagName ('description')->item (0)->nodeValue, 
      'category' => array()); 
    foreach ($node->getElementsByTagName ('category') as $cat) { 
     $item['category'][] = $cat->nodeValue; 
    } 
    array_push ($feed, $item); 
} 

foreach($feed as $feedItem) { 
    $title = str_replace (' & ', ' &amp; ', $feedItem ['title']); 
    $description = $feedItem ['desc']; 
    $category = $feedItem ['category']; 

    echo $title; 
    echo $description; 
    foreach ($category as $cat) { 
     echo "Category:".$cat.PHP_EOL; 
    } 
} 
関連する問題