如何使用<解析 xml![CDATA[.


How to parse xml with <![CDATA[?

我有一个看起来像这样的 xml 提要:

<?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>

你不是在迭代<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;

演示