2010-01-29 5 views
5

On m'a demandé d'analyser un fichier simple qui est stocké sous forme de fichier XML, les données doivent ensuite être placées dans une base de données mysql.Analyse des données XML en utilisant php pour les mettre dans la base de données mysql

Cependant, je n'ai absolument aucune idée de ce qu'il faut faire et après avoir regardé en ligne tous les exemples donnés semblent trop compliqués pour mon problème ou pas la bonne solution. Le fichier XML ressemble à ceci:

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

J'ai essayé de regarder SimpleXML et je pense que c'est la direction que je dois aller mais je n'ai aucune idée.

Toute aide ou pointeurs serait génial.

+0

Vous avez oublié la balise de fermeture) dans votre exemple xml – Thirler

+0

double: http://stackoverflow.com/questions/2161722/parsing- xml-data-using-php-à-mettre-dans-mysql-base de données –

Répondre

4

En supposant que le fichier est appelé data.xml

$string = file_get_contents('data.xml') lit le fichier entier dans $string.

$xml = new SimpleXMLElement($string); analyse cette chaîne et la convertit en une arborescence d'objets similaire au document réel. Donc, si c'est le document -

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

L'objet SimpleXMLElement serait utilisé comme:

$xml->b    // gets all children of b (c[0] and c[1]) 
print $xml->b->c[0] // gets the first c, will print "first" 
4

Vous pouvez par exemple utiliser SimpleXMLElement et xpath

<?php 
$xmlStr = <<<EOF 
<?xml version="1.0"?> 
<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> 
</shop> 
EOF; 

$xml=new SimpleXMLElement($xmlStr); 

// get product line with xpath for example 
$products=$xml->xpath("/shop/products/product"); 
if ($products) { 
// loop over each product node 
foreach ($products as $product) { 
    // do whatever you want with the data 
    echo("id=>".$product["id"].", name=>".$product["name"]."<br/>"); 
} 
} 

// same for stock 
// get product line with xpath for example 
$stocks=$xml->xpath("/shop/stocks/stock"); 
if ($stocks) { 
// loop over each product node 
foreach ($stocks as $stock) { 
    // do whatever you want with the data 
    echo("id=>".$stock["id"].", amount=>".$stock["amount"]."<br/>"); 
} 
} 

?> 
5

Personnellement, je aime la mise en forme XMl normale donc je l'ai changé car c'est un peu plus lisible mais voici comment vous pouvez l'utiliser:

$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; 

partie Manipulation:

$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/>'; 
} 
1
$xml = simplexml_load_file($filename); 
foreach($xml->product as $product) {    

    foreach($product->attributes() as $name => $attribute) { 
    echo "$name = $attribute"; 
    }   
} 
+0

Cela n'a rien fait pour moi. Je viens d'avoir une page vide. Peut-être que j'aurais dû mentionner le fichier avait un autre élément c'est comme ça. Would qui ont fait une différence? – Matthew

0
$xml = simplexml_load_file($filename); 

foreach($xml->products->product as $not) 
{ 
    foreach($not->attributes() as $a => $b) 
    { 
     echo $a,'="',$b,"\"<br />"; 
    } 
} 
+0

Vous voudrez peut-être ajouter plus de texte pour décrire ce que vous faites et pourquoi. – Sgoettschkes

Questions connexes