user2534454
user2534454

Reputation: 405

Converting XML in php

I have a problem. I have 2 files. First file 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>'; 

?>

And the second file index.php:

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

$products =new SimpleXMLElement($str);

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

?>

I use Wamserver. When i try to run index.php in web Browser I get errors: http://zapodaj.net/images/fbd51b9ca6da9.jpg I want to show name of each product. Can someone can tell me how to solve this problem?

Upvotes: 1

Views: 73

Answers (3)

Ikari
Ikari

Reputation: 3236

As CommuSoft Says You Haven't Closed your XML block

</product>
</products>';

And you should use as CommuSoft says simplexml_load_string($str); As you are storing your XML in a variable as a string.

Upvotes: 0

baroni
baroni

Reputation: 176

Your products end block is wrong, you forgot /

Pleas find correct 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>

You can used this website to check your xml online : http://www.xmlvalidation.com/

Upvotes: 1

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476534

First of all, the XML is not valid, you need a closing tag at the end:

    </product>
</products>'; 

(last lines of the file). The rest of the code seems ok.

Secondly, you should use

simplexml_load_string($str);

Example (with 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>

Upvotes: 1

Related Questions