2012-10-06 144 views
0

我有一个xml文档,我需要获取与帮助php的名称属性值。该XML文件看起来像这样:需要帮助.. php肥皂

<?xml version="1.0" encoding="utf-8"?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
    <S:Body> 
     <ns2:GetGoodsTreeResponse xmlns:ns2="http://b2b.alta.com.ge" xmlns:ns3="http://192.168.0.10/b2b"> 
     <ns3:GoodsTree level="0"> 
      <item id="010000000017337" level="0" name="COMPUTERS" is_open="N"> 
       <item id="015000000030431" level="1" name="ALTA" is_open="Y"> 
        <item id="015000000030443" level="2" name="Zakaznoe Izdelie" is_open="N"/> 
        <item id="015002000031034" level="2" name="ATOM" is_open="N"/> 
        <item id="015005000030453" level="2" name="Celeron" is_open="N"/> 
        <item id="015010000030432" level="2" name="Dual Core" is_open="N"/> 
        <item id="015150000030778" level="2" name="i3" is_open="N"/> 
        <item id="015220000030775" level="2" name="i5" is_open="N"/> 
        <item id="015300000031827" level="2" name="i7" is_open="N"/> 
       </item> 
       <item id="010001005030300" level="1" name="Apple" is_open="N"/> 
       <item id="010001001033496" level="1" name="Asus" is_open="N"/> 
       <item id="010001001015793" level="1" name="Fujitsu" is_open="N"/> 
       <item id="010001002015166" level="1" name="HP Compaq" is_open="N"/> 
      </item> 
      </ns3:GoodsTree> 
     </ns2:GetGoodsTreeResponse> 
    </S:Body> 
</S:Envelope> 

请帮助我我不知道该怎么办..对不起我的英语。

回答

2

您可以使用DOMDocument来解析XML和使用DOMXpath,然后在所有项目环获得所有项目,并获得基于位置的属性(id = 0,name = 2),然后创建一个新的数组,将持有的所有您的产品ID与他们的名字:

$dom = new DOMDocument; 
$dom->loadXML($xml); 

$xpath = new DOMXPath($dom); 
$xpath->registerNamespace('S', 'http://schemas.xmlsoap.org/soap/envelope/'); 

$items = array(); 

$el = $xpath->query('//item'); 
foreach($el as $item){ 
    $attributes = $item->attributes; 
    $items[$attributes->item(0)->value] = $attributes->item(2)->value; 
} 

var_dump($items); // $items will be an array with item id and it's value will be item name 

Codepad Example

+0

非常感谢你为你的答案,但它输出的错误:警告:DOM文档:: loadXML的()[domdocument.loadxml]:开始标记预期,“< '未在实体中找到,行:1 – GioGio

+0

如果您检查[键盘示例](http://codepad.org/V0HlCzbx),您将看到它基于您提供的XML工作。 –

+0

非常感谢你,你为我工作gr8工作 – GioGio