2014-12-03 54 views
0

我有一個XML飼料,看起來像這樣:如何用<![CDATA [?

<?xml version="1.0" encoding="UTF-8"?> 
<books version="1.0"> 
<book> 
<NR><![CDATA[1]]></NR> 
<title><![CDATA[somebook]]></title> 
<picture><![CDATA[http://www.website.com/images/somebook_pic.jpg]]></picture> 
</book> 
</books> 

而且一個PHP循環不工作:

<?php 
$file = "books.php"; 
$html = ""; 
$url = "http://www.website.com/feed/feed.xml"; 
$xml = simplexml_load_file($url); 
for($i = 0; $i < 10; $i++){ 
$number = $xml->book[$i]->NR; 
$img = $xml->book[$i]->picture; 
$title = $xml->book[$i]->title; 
$html .= "<img src=\"$img\">$title - $number</a>"; 
} 
file_put_contents($file, $html); 
?> 

這是工作時XML飼料是沒有[CDATA [,可惜他們改變它(我不知道爲什麼),現在它不工作。

XML飼料更新:

<?xml version="1.0" encoding="UTF-8"?> 
<books version="1.4"> 
<category name="science-fiction"> 

<book> 
<NR><![CDATA[1]]></NR> 
<title><![CDATA[somebook]]></title> 
<picture><![CDATA[http://www.website.com/images/somebook_pic.jpg]]></picture> 
</book> 

<book> 
<NR><![CDATA[2]]></NR> 
<title><![CDATA[somebook2]]></title> 
<picture><![CDATA[http://www.website.com/images/somebook2_pic.jpg]]></picture> 
</book> 

</category> 
</books> 
+0

它產生空 - – Belhor 2014-12-03 04:41:21

+0

我試過你的代碼和它的作品沒關係的第一個項目;爲什麼不迭代'$ xml-> book'而不是執行10的任意循環? – 2014-12-03 04:50:48

+0

我沒有經驗的PHP和不幸的是它不爲我工作,但感謝回答:( – Belhor 2014-12-03 05:03:49

回答

0

你不是遍歷<category>元素;這應該工作:

$books = simplexml_load_string($xml); 

$html = ''; 

foreach ($books->category->book as $book) { 
    $html .= sprintf('<img src="%s">%s - %s</a>', 
     htmlspecialchars($book->picture, ENT_QUOTES, 'UTF-8'), 
     htmlspecialchars($book->title, ENT_QUOTES, 'UTF-8'), 
     htmlspecialchars($book->NR, ENT_QUOTES, 'UTF-8') 
    ); 
} 

echo $html, PHP_EOL; 

Demo

+1

這是工作:) 謝謝傑克! – Belhor 2014-12-03 05:36:58