在 php 中转换 XML

Converting XML in php

我有问题。我有 2 个文件。第一个文件 data.php:

<?php
$str = '<?xml version="1.0"?>
<products>
    <product>
        <name>Radio</name>
        <price>79.99</price>
        <desc>Place for describe</desc>
    </product>
        <product>
        <name>TV</name>
        <price>599.99</price>
        <desc>Place for describe</desc>
    </product>
    <product>
        <name>Book</name>
        <price>75.00</price>
        <desc>Place for describe</desc>
    </product>
<products>'; 

?>

第二个文件index.php:

<?php
include('data.php');

$products =new SimpleXMLElement($str);

foreach($products->product as $product){
echo $product->name;
echo "<br>";
}

?>

我使用 Wamserver。当我尝试在网络浏览器中运行 index.php 时出现错误: http://zapodaj.net/images/fbd51b9ca6da9.jpg 我想显示每个产品的名称。谁能告诉我如何解决这个问题?

首先,XML是无效的,你需要在末尾加上一个结束标签:

    </product>
</products>'; 

(文件的最后几行)。其余代码似乎没问题。

其次,你应该使用

simplexml_load_string($str);

示例(含php -a):

$ php -a
Interactive mode enabled

php > $str='<?xml version="1.0"?>
php ' <products>
php '     <product>
php '         <name>Radio</name>
php '         <price>79.99</price>
php '         <desc>Place for describe</desc>
php '     </product>
php '         <product>
php '         <name>TV</name>
php '         <price>599.99</price>
php '         <desc>Place for describe</desc>
php '     </product>
php '     <product>
php '         <name>Book</name>
php '         <price>75.00</price>
php '         <desc>Place for describe</desc>
php '     </product>
php ' </products>';
php > $products = simplexml_load_string($str);
php > foreach($products->product as $product){
php { echo $product->name;
php { echo "<br>";
php { }
Radio<br>TV<br>Book<br>

你的产品结束块错了,你忘了/

请找出正确的xml

<?xml version="1.0"?>
<products>
    <product>
        <name>Radio</name>
        <price>79.99</price>
        <desc>Place for describe</desc>
    </product>
    <product>
        <name>TV</name>
        <price>599.99</price>
       <desc>Place for describe</desc>
    </product>
    <product>
        <name>Book</name>
        <price>75.00</price>
        <desc>Place for describe</desc>
    </product>
</products>

您可以使用此网站在线检查您的 xml : http://www.xmlvalidation.com/

正如 CommuSoft 所说,您尚未关闭 XML 区块

</product>
</products>';

你应该按照 CommuSoft 所说的那样使用 simplexml_load_string($str); 当您将 XML 作为字符串存储在变量中时。