2015-04-23 62 views
0

我有類似下面的XML:檢索從XML數據並存儲到mysql表

<?xml version="1.0" encoding="UTF-8"?> 
<items> 
     <item> 
      <id>1000416</id> 
      <price>9990</price> 
      <stock>1</stock> 
      <name><![CDATA[Benbo Mk3 Trekker Kit Trépied avec Tête B&S et sac]]></name> 
      <attributes> 
       <attribute datatype="text"> 
        <name><![CDATA[name]]></name> 
        <value><![CDATA[Benbo Mk3 Trekker Kit Trépied avec Tête B&amp;S et sac]]></value> 
       </attribute> 
       <attribute datatype="text"> 
        <name><![CDATA[sku]]></name> 
        <value><![CDATA[BEN107C]]></value> 
       </attribute> 
       <attribute datatype="numeric"> 
        <name><![CDATA[price]]></name> 
        <value>9900</value> 
       </attribute> 
       <attribute datatype="text"> 
        <name><![CDATA[manufacturer]]></name> 
        <value><![CDATA[Benbo]]></value> 
       </attribute> 
       <attribute datatype="text"> 
        <name><![CDATA[url_key]]></name> 
        <value><![CDATA[benbo-mk3-trekker-kit-trepied-avec-tete-b-s-et-sac]]></value> 
       </attribute> 
       <attribute datatype="text"> 
        <name><![CDATA[photo_video]]></name> 
        <value><![CDATA[Photo ]]></value> 
       </attribute> 
       <attribute datatype="text"> 
        <name><![CDATA[includes_tripodhead]]></name> 
        <value><![CDATA[Oui]]></value> 
       </attribute> 
       <attribute datatype="text"> 
        <name><![CDATA[material]]></name> 
        <value><![CDATA[Aluminium]]></value> 
       </attribute> 
       <attribute datatype="numeric"> 
        <name><![CDATA[stock_lc_kroezenhoek]]></name> 
        <value>1</value> 
       </attribute> 
       <attribute datatype="numeric"> 
        <name><![CDATA[stock_total]]></name> 
        <value>1</value> 
       </attribute> 
       <attribute datatype="numeric"> 
        <name><![CDATA[eancode]]></name> 
        <value>123456789</value> 
       </attribute> 
      </attributes> 
      <categories> 
       <categoryid>100042</categoryid> 
       <categoryid>10004332</categoryid> 
      </categories> 
     </item> 
     <item> 
      <id>1000418</id> 
      <price>4896</price> 
      <stock>0</stock> 
      <name><![CDATA[Benbo Trekker Monopod]]></name> 
      <attributes> 
       <attribute datatype="text"> 
        <name><![CDATA[name]]></name> 
        <value><![CDATA[Benbo Trekker Monopod]]></value> 
       </attribute> 
       <attribute datatype="text"> 
        <name><![CDATA[sku]]></name> 
        <value><![CDATA[BEN109]]></value> 
       </attribute> 
       <attribute datatype="numeric"> 
        <name><![CDATA[price]]></name> 
        <value>4896</value> 
       </attribute> 
       <attribute datatype="text"> 
        <name><![CDATA[manufacturer]]></name> 
        <value><![CDATA[Benbo]]></value> 
       </attribute> 
       <attribute datatype="text"> 
        <name><![CDATA[url_key]]></name> 
        <value><![CDATA[benbo-trekker-monopod]]></value> 
       </attribute> 
       <attribute datatype="numeric"> 
        <name><![CDATA[stock_lc_kroezenhoek]]></name> 
        <value>1</value> 
       </attribute> 
       <attribute datatype="numeric"> 
        <name><![CDATA[stock_total]]></name> 
        <value>1</value> 
       </attribute> 
       <attribute datatype="numeric"> 
        <name><![CDATA[eancode]]></name> 
        <value>3987654321</value> 
       </attribute> 
       <attribute datatype="text"> 
        <name><![CDATA[manufacturer_code]]></name> 
        <value><![CDATA[BEN109]]></value> 
       </attribute> 
      </attributes> 
      <categories> 
       <categoryid>100042</categoryid> 
       <categoryid>10004329</categoryid> 
      </categories> 
     </item> 
     </items> 
從這個XML

現在我想存儲在MySQL表中的每個屬性值......每個值會是一個列...獲取此我已經使用以下代碼:

$values = array(); 
$reader = new XMLReader(); 
$reader->open('test.xml'); 
$id = 'attribute'; 
while ($reader->read()) { 
    if ($reader->nodeType == XMLReader::ELEMENT) { 
     $exp = $reader->expand(); 
     if ($exp->nodeName == "item") { 
      // if (count($values)) print implode(" : ", $values); 
      //$values = array(); 
     } 
     if ($exp->nodeName == $id) { 
      foreach ($exp->childNodes as $node) { 
       if ($node->nodeName == "value") { 
        $values[] = $node->textContent; 

       } 
      // $values[] = null; 
      } 

     } 

    } 

    } 

if (count($values)) print implode(" : ", $values);     

這使我從由分離的陣列顯示的值:但我想的標記每個值存儲從「屬性「在MySql表中的節點...任何人都可以請幫助我我真的很困難,因爲我很新的XML編程...

在此先感謝!

+0

請通過詢問延長你的問題明確和具體的問題,並解釋你如何被卡住。 – michi

回答

0

通過以下網址去後,我已經使用了下面的代碼和它的作品對我來說...感謝大家的時間......

How to use XMLReader in PHP?

$z = new XMLReader; 
$z->open('test.xml'); 

$doc = new DOMDocument; 


while ($z->read() && $z->name !== 'product'); 


while ($z->name === 'product') 
{ 

    $node = new SimpleXMLElement($z->readOuterXML()); 
    $a = $node->EAN; 
    $b = $node->Prijs; 
    $c = $node->Titel; 
    echo $a .$b.$c."<br />"; 

    $z->next('product'); 
} 
相關問題