Parsing XML data using php to put into mysql database

前端 未结 5 1445
夕颜
夕颜 2020-12-05 21:59

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

相关标签:
5条回答
  • 2020-12-05 22:26
    $xml = simplexml_load_file($filename);
    foreach($xml->product as $product) {            
    
      foreach($product->attributes() as $name => $attribute) {
        echo "$name = $attribute";
      }         
    }
    
    0 讨论(0)
  • 2020-12-05 22:27

    You can use for example SimpleXMLElement and 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/>");
     }
    }
    
    ?>
    
    0 讨论(0)
  • 2020-12-05 22:31
    $xml = simplexml_load_file($filename);
    
    foreach($xml->products->product as $not)
    {
        foreach($not->attributes() as $a => $b)
        {
            echo $a,'="',$b,"\"<br />";
        }
    }
    
    0 讨论(0)
  • 2020-12-05 22:35

    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/>';
    }
    
    0 讨论(0)
  • 2020-12-05 22:47

    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"
    
    0 讨论(0)
提交回复
热议问题