【问题标题】:How to parse child attributes in xml file?如何解析xml文件中的子属性?
【发布时间】:2014-03-01 11:05:26
【问题描述】:

我正在解析一个在线 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>";
   }
}


但它会找到所有产品的所有 option name="color" & option name="Size"
我想查找特定产品的选项值,并将产品 ID 作为输出。

【问题讨论】:

    标签: php xml xml-parsing


    【解决方案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;
                }
    
    
            }
    }
    
    
    
    
    
    }
    

    大小和其他选项类似......

    【讨论】:

    • 感谢@nevermind 这对我有用..非常感谢。它节省了我的时间。
    【解决方案2】:

    这里$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

    【讨论】:

    • thanKs Nouphal ..我想得到如下值:Medium|+|0.00,Large|+|0.00,Navy|+|0.00,Red|+|0.00
    猜你喜欢
    • 2012-06-08
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多