php - 如何从 XML 读取所有产品

标签 php mysql 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>

我已经这样做了,它有效。我如何从类别中获取产品,然后转到下一个类别并获取数据库需要的下一个产品序列

  //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');

      }

最佳答案

您可以尝试像这样使用 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
}

关于php - 如何从 XML 读取所有产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15112367/

相关文章:

mysql - Plesk CLI 数据库 --create : This object can be created only in a subscription

php - 通过发送 SOAP 请求实现 Air API

php - 在 PHP 范围内生成随机 float

php - 在 Javascript 中模仿 $_GET

c# - 使用C#连接MySQL数据库

mysql - Mysql 上的 Zend 框架查询

java - JAXB 解码在运行时选择根名称

javascript - 如何使用 Angularjs 将数据库中的字符串转换为 XML

带有 MYSQL 查询的 PHP 表单在页面加载时运行,而不是在点击提交按钮时运行

php - 使用 php 将字符串转换为数组