2010-01-29 9 views
5

Se me ha pedido que analice un archivo simple que se almacena como un archivo XML, los datos se colocarán en una base de datos mysql.Análisis de datos XML utilizando php para poner en la base de datos mysql

Sin embargo, no tengo absolutamente ninguna idea de qué hacer y, después de mirar en línea, todos los ejemplos dados me parecen demasiado complicados para mi problema o no la solución adecuada. El archivo XML es el siguiente:

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

He intentado buscar en SimpleXML y creo que esa es la dirección que tengo que ir pero tengo ni idea.

Cualquier ayuda o punteros sería genial.

+0

Se ha olvidado de la etiqueta de cierre) en su ejemplo xml – Thirler

+0

duplicado: http://stackoverflow.com/questions/2161722/parsing- xml-data-using-php-to-put-into-mysql-database –

Respuesta

4

Suponiendo que el archivo se llama data.xml

$string = file_get_contents('data.xml') lee todo el archivo en $string.

$xml = new SimpleXMLElement($string); analiza esa cadena y la convierte en un árbol de objetos similar al documento real. Así que si ese es el documento -

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

El objeto SimpleXMLElement sería utilizado como:

$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

Se puede utilizar por ejemplo SimpleXMLElement y 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

personalmente me gusta el formato XML normales así que lo cambié porque es un poco más legible, pero así es como puedes usarlo:

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

parte Manipulación:

$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

Eso no hizo nada por mí. Acabo de recibir una página vacía. Tal vez debería haber mencionado que el archivo tenía otro elemento así. ¿Habría hecho una diferencia? – Matthew

0
$xml = simplexml_load_file($filename); 

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

Es posible que desee agregar más texto para describir lo que está haciendo y por qué. – Sgoettschkes

Cuestiones relacionadas