2013-02-27 5 views
0

У меня есть много категорий в моем XML-файле. Как я могу прочитать все продукты в нем?Как я могу прочитать все продукты из XML

Он читает только первую категорию. Я включаю файл xml для просмотра. Вот PHP код, я использую:

//get products from xml file 
    foreach($xml->CREATED->CATEGORY as $product){ 

    $atts = $product->PRODUCT->attributes(); 
    $productitemid = $atts['ITEM']; 

    $title = $product->MODEL; 
    $rrp = $product->RRP; 
    $productsdescription = $product->DESCRIPTION; 
    $prodname = $product->NAME; 
    echo $productitemid.' - ' ; 
    // echo $product->id.' - '; 
    mysql_query("INSERT INTO products (products_id,products_model,products_price,products_status) VALUES ('$productitemid','$title','$rrp','1')"); 
    mysql_query("INSERT INTO products_description (products_id,products_name,products_description) VALUES ('$productitemid','$prodname','$productsdescription')"); 
} 

А вот это XML структура:

<?xml version="1.0" encoding="iso-8859-1"?> 
<STOREITEMS> 
<CREATED value="Fri Feb 22 1:01:02 GMT 2013"> 
    <CATEGORY id="441" name=" > test1"> 
    <PRODUCT ITEM="12796"> 
    <NAME>test1</NAME> 
    <MODEL>bb2018</MODEL> 
    <PRICE>2.28</PRICE> 
    <RRP>3.99</RRP> 
    <THUMB>bb2018s.jpg</THUMB> 
    <IMAGE>bb2018.jpg</IMAGE> 
    <DESCRIPTION> 
     test1 
     </DESCRIPTION> 
     <POWER/> 
     <SIZE/> 
     <ATTRIBUTES NAME="Size" ATTRIBUTEID="2"> 
     <ATTRIBUTEVALUES VALUE="16" TITLE="Small" PRICEADJUST="0.00"/> 
     <ATTRIBUTEVALUES VALUE="17" TITLE="Medium" PRICEADJUST="0.00"/> 
      <ATTRIBUTEVALUES VALUE="18" TITLE="Large" PRICEADJUST="0.00"/> 
      </ATTRIBUTES> 
     </PRODUCT> 
    <CATEGORY id="442" name=" > test2"> 
    <PRODUCT ITEM="12805"> 
    <NAME>test2</NAME> 
    <MODEL>bb2034</MODEL> 
    <PRICE>0.58</PRICE> 
    <RRP>1.50</RRP> 
     <THUMB>bb2034s.jpg</THUMB> 
     <IMAGE>bb2034.jpg</IMAGE> 
     <DESCRIPTION> 
     test2 
     </DESCRIPTION> 
     <POWER/> 
     <SIZE/> 
     </PRODUCT> 
     <CATEGORY id="4423" name=" > test3"> 
     <PRODUCT ITEM="13719"> 
     <NAME>test3?</NAME> 
     <MODEL>BCPG02</MODEL> 
     <PRICE>2.83</PRICE> 
     <RRP>4.95</RRP> 
     <THUMB>bcg02s.jpg</THUMB> 
    <IMAGE>bcpg02.jpg</IMAGE> 
    <DESCRIPTION> 
    test3 
    </DESCRIPTION> 
    </PRODUCT> 
    </CATEGORY> 
    </CREATED> 
    </STOREITEMS> 

я сделал это, как это работает. Как я могу получить продукты из categorys затем перейти к следующему cateory и получить следующий Porducts dabase нужен последовательность

//i have done it like this it works 

$doc = new DOMDocument(); 
$var = $doc->load('shop.xml'); 

$root = $doc->documentElement; //root node 
    $items = $doc->getElementsByTagName('PRODUCT'); 
    $cat = $doc->getElementsByTagName('CATEGORY'); 

    foreach ($cat as $cats){ 
    foreach ($items as $bar) 

    if ($categoriesid == $b) 

$productsid = $bar->getAttribute('ITEM'); 
$modelcode = $bar->getElementsByTagName('MODEL')->item(0)->nodeValue; 
     $rrp = $bar->getElementsByTagName('RRP')->item(0)->nodeValue; 
     $productsdescription = $bar->getElementsByTagName('DESCRIPTION')->item(0)->nodeValue; 
     $prodname = $bar->getElementsByTagName('NAME')->item(0)->nodeValue; 


    $categoriesid = $cats->getAttribute('id'); 
     $categoriesname = $cats->getAttribute('name'); 

     } 
+3

Не могли бы вы добавить структуру вашего XML, пожалуйста? – Bigood

+1

Научитесь изолировать проблемы. Все ссылки на MySQL не имеют значения, если проблема в том, что вы не читаете все элементы из XML. –

ответ

0

Пожалуйста, посмотрите на пример ниже кусок кода надежды, что это поможет вам.

<?php 
    $xmlString= '<xml Version="1.0"> 
    <created> 
<category> 
    <product id="a"/> 
</category> 
<category> 
    <product id="b"/> 
</category> 
<category> 
    <product id="c"/> 
</category> 
<category> 
    <product id="d"/> 
</category> 
</created> 
</xml>'; 


$xml = new SimpleXMLElement($xmlString); 

foreach ($xml->created->category as $element) 
{ 
    foreach($element as $val) 
    { 
     echo " product : ".$val->attributes(); 
    } 
} 

?> 

Выход этого кода будет читать все атрибуты продукта

product : a product : b product : c product : d 
1

Вы можете попробовать использовать DOMDocument как это:

$doc = new DOMDocument(); 
$var = $doc->load('yourxml.xml'); 

$root = $doc->documentElement; //root node 
$items = $doc->getElementsByTagName('product'); 

foreach ($items as $bar) 
{ 
    $name = $bar->getElementsByTagName('name')->item(0)->nodeValue; 
    $model = $bar->getElementsByTagName('model')->item(0)->nodeValue; 
    $price = .... 
    //do something with the values 
} 
Смежные вопросы