Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parsing XML data using php to put into mysql database

I have been asked to parse a simple file which is stored as an XML file, the data is to be then put into a mysql database.

However I have absolutely no clue what to do and after looking online all the examples given seem either too complicated for my problem or not the right solution. The XML file looks like this:

<shop>
<products>
    <product id="1" name="Cornetto" price="1.20" description="Traditional Cornetto" />
    <product id="2" name="Smarties" price="1.00" description="Smarties Icecream" />
</products>

<stocks>
    <stock id="1" amount="242" price="pounds" />
    <stock id="2" amount="11" price="pounds" />
</stocks>

I've tried looking at SimpleXML and I think that's the direction I have to go but I just have no idea.

Any help or pointers would be great.

like image 952
Matthew Avatar asked Jan 29 '10 12:01

Matthew


People also ask

How can we transfer XML data to MySQL table in PHP?

If selected file is XML then after we have use simplexml_load_file() PHP function, this function will convert selected XML file into Simple XML Element object. So from this object we can fetch data in our PHP by using loop and after this we will insert into Mysql table.

How read data from XML file and insert into database in PHP?

This input file is loaded to get the file handle object to parse the XML data. Then, the PHP code will iterate each of the parsed item to get its child node and its data. With this data MySQL insert query is created and executed to copy XML data to the database.

How can we transfer XML data to MySQL table?

Loading XML file: We will use simplexml_load_file() function to convert the well-formed XML document into the given file to an object.

How will you parse an XML document using PHP?

The simplexml_load_string() function is used to parse the given XML and then the XML object can be used for accessing the XML data.


2 Answers

I personally like the normal XMl formatting so I changed it since its a bit more readable but this is how you can use it:

$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<shop>
<products>
    <product>
        <id>1</id>
        <name>Cornetto</name>
        <price>1.20</price>
        <description>Traditional Cornetto</description>
    </product>
    <product>
        <id>2</id>
        <name>Smarties</name>
        <price>1.00</price>
        <description>Smarties Icecream</description>
    </product>
</products>
<stocks>
    <stock>
        <id>1</id>
        <amount>242</amount>
        <price>pounds</price>
    </stock>
    <stock>
        <id>2</id>
        <amount>11</amount>
        <price>pounds</price>
    </stock>
</stocks>
</shop>
XML;

Handling part:

$xml = new SimpleXMLElement($xmlstr);
echo 'single value: <br />';
echo $xml->products->product[0]->id; // get single value

echo '<br /><br />';

//Loop trough multiple products
echo 'multiple values: <br />';
foreach($xml->products->product as $product)
{
    echo $product->id.' - ';
    echo $product->name.' - ';
    echo $product->price.' - ';
    echo $product->description;
    echo '<br/>';
}
like image 73
RJD22 Avatar answered Oct 18 '22 06:10

RJD22


Assuming the file is called data.xml

$string = file_get_contents('data.xml') reads the entire file into $string.

$xml = new SimpleXMLElement($string); parses that string, and converts it into an object tree similar to the actual document. So if that's the document -

<root>
  <b>
    <c>first</c>
    <c>second</c>
  </b>
</root>

The SimpleXMLElement object would be used like:

$xml->b              // gets all children of b (c[0] and c[1])
print $xml->b->c[0]  // gets the first c, will print "first"
like image 41
Anurag Avatar answered Oct 18 '22 04:10

Anurag