MySQL veritabanı içine koymak php kullanarak XML verilerini ayrıştırma

3 Cevap php

Ben bir XML dosyası olarak saklanır basit bir dosyayı ayrıştırmak için istendi, veriler daha sonra bir mysql veritabanına koymak olmaktır.

Ancak ben ne yapmak kesinlikle hiçbir ipucu var ve çevrimiçi verilen tüm örnekler baktıktan sonra benim sorun ya doğru çözüm için ya çok karmaşık görünüyor. XML dosyası bu gibi görünüyor:

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

Ben SimpleXML bakarak denedim ve ben gitmek zorunda ama ben sadece hiçbir fikrim yok yönü olduğunu düşünüyorum.

Herhangi bir yardım veya işaretçiler olurdu.

3 Cevap

Dosya denir varsayarsak data.xml

$string = file_get_contents('data.xml') $string içine dosyanın tamamını okur.

$xml = new SimpleXMLElement($string); bu dizeyi ayrıştırır ve gerçek belgeye benzer bir nesne ağacına dönüştürür. Yani belge ise -

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

SimpleXMLElement nesne gibi kullanılabilir olacaktır:

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

Örneğin SimpleXMLElement kullanın ve xpath olabilir

<?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/>");
 }
}

?>

Ben şahsen normal bir XML biçimlendirme gibi ben onun biraz daha okunabilir beri değişti ama bu bunu kullanmak nasıl:

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

Parçası Taşıma:

$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/>';
}