如何在xml文件中解析子属性?

时间:2014-03-01 11:05:26

标签: php xml xml-parsing

我已经解析了一个在线xml文件。 check online link Here
上面url Feed的示例xml文件如下所示:
test1.xml

<products>
<item>
<id>1375</id>
<option name="Colour">
<value optionID="128" quantity="2">Navy|+|0.00</value>
<value optionID="128" quantity="1">Red|+|0.00</value>
</option>
</item>
<item>
<id>1375</id>
<option name="Sixer">
<value optionID="128" quantity="2">Medium|+|0.00</value>
<value optionID="128" quantity="1">Large|+|0.00</value>
</option>
</item>
</products>

我使用simplexml_load_file
像:

$xml = simplexml_load_file('test1.xml');
foreach($xml as $product)
{
 echo $product->id;
}

我得到了Id作为输出。
但我的问题是如何在foreach循环中获得颜色和大小的价值。
我目前正在使用

 foreach ($product->xpath('//option[@name="Colour"]') as $item)
{    
  foreach ($item->children() as $child) 
   {
    echo "color"."<br>";
   }
}
foreach ($product->xpath('//option[@name="Size"]') as $item)
{    
  foreach ($item->children() as $child) 
   {
    echo "Size"."<br>";
   }
}


但它会找到所有选项name =“color”&amp;所有产品的选项名称=“尺寸” 我想找到产品ID作为输出的特定产品的选项值。

2 个答案:

答案 0 :(得分:1)

$xml = simplexml_load_file('http://www.devilwear.co.uk/store/feeds/dwfeed_item_dropship.xml');


$item='35282';

foreach($xml as $product) {

$id=$product->id;

if($id==$item) {


        $attr = $product->option->attributes();
        if($attr['name']=='Colour') {



            foreach($product->option->children() as $value){

            echo $value;
            }


        }
}





}

类似于尺寸和其他选项......

答案 1 :(得分:0)

此处$toFind变量将保留找到的产品ID,请尝试

$xml = simplexml_load_string($str);
$toFind =  1376;
$items = $xml->xpath('/products/item');
$result = array();
foreach($items as $it){
   if($it->id == $toFind){
     $temp=array();
     $temp['id'] = (string) $it->id;
     $option = $it->option;
     foreach( $option->attributes() as $key=>$val){
         $temp['option_name'] = (string)$val;
         foreach($option->children() as $optChild){
           foreach( $optChild->attributes() as $key1=>$val1){
              $temp['option_value'][(string)$key1] = (string)$val1;
           }
         }
     }
     $result[] = $temp;
   }
}

请参阅演示here