2011-11-03 253 views
0

在通過cURL獲取文件後,我在此處使用自定義XML解析器。獲取XML節點屬性

這裏的解析函數

function pd_xml_parser($rawxml) { 
$xml_parser = xml_parser_create(); 
xml_parse_into_struct($xml_parser, $rawxml, $vals, $index); 
xml_parser_free($xml_parser); 
$params = array(); 
$level = array(); 
$alreadyused = array(); 
$x=0; 
foreach ($vals as $xml_elem) { 
    if ($xml_elem['type'] == 'open') { 
     if (in_array($xml_elem['tag'],$alreadyused)) { 
      $x++; 
      $xml_elem['tag'] = $xml_elem['tag'].$x; 
     } 
     $level[$xml_elem['level']] = $xml_elem['tag']; 
     $alreadyused[] = $xml_elem['tag']; 
    } 
    if ($xml_elem['type'] == 'complete') { 
     $start_level = 1; 
     $php_stmt = '$params'; 
     while($start_level < $xml_elem['level']) { 
      $php_stmt .= '[$level['.$start_level.']]'; 
      $start_level++; 
     } 
     $php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];'; 
     @eval($php_stmt); 
    } 
} 
return($params); 
} 

樣本文件看起來像:

<api> 
    <tickets> 
    <ticket id="number"> 
    <data></data> 
    </ticket> 
    </tickets> 
</api> 

目前,我正在打電話的每個節點,使用的foreach數據。我將如何從票證節點提取屬性,即id屬性?

感謝

回答

2

您可以嘗試

$xml = '<api> 
    <tickets> 
    <ticket id="111"> 
    <data></data> 
    </ticket> 
    <ticket id="222"> 
    <data></data> 
    </ticket> 

    </tickets> 
</api>'; 

echo "<pre>"; 
$xml = new SimpleXMLElement($xml); 
foreach ($xml->tickets->children() as $ticket) { 
    $attribute = $ticket->attributes(); 
     print($attribute['id'].PHP_EOL); 
} 

輸出

111 
222 
+2

一直在尋找這個答案,因爲我的問題是類似的話題。一個恥辱,他從來沒有接受你的答案。 – Shogoot

+0

@Shogoot謝謝..... :) – Baba