2014-09-10 36 views
0

下面我有以下代碼:PHP的XML解析會刪除屬性值

<?php 

$xml = '<Divisions xmlns="urn:description7a.services.chrome.com"> 
     <responseStatus responseCode="Successful" description="Successful"/> 
     <division id="1">Acura</division> 
     <division id="44">Aston Martin</division> 
     <division id="4">Audi</division> 
     <division id="45">Bentley</division> 
     <division id="5">BMW</division> 
     <division id="6">Buick</division> 
     <division id="7">Cadillac</division> 
     <division id="8">Chevrolet</division> 
     <division id="9">Chrysler</division> 
     <division id="11">Dodge</division> 
     <division id="46">Ferrari</division> 
     <division id="59">FIAT</division> 
     <division id="13">Ford</division> 
     <division id="170">Freightliner</division> 
     <division id="15">GMC</division> 
     <division id="16">Honda</division> 
     <division id="17">Hyundai</division> 
     <division id="18">Infiniti</division> 
     <division id="19">Isuzu</division> 
     <division id="20">Jaguar</division> 
     <division id="21">Jeep</division> 
     <division id="22">Kia</division> 
     <division id="47">Lamborghini</division> 
     <division id="23">Land Rover</division> 
     <division id="24">Lexus</division> 
     <division id="25">Lincoln</division> 
     <division id="48">Lotus</division> 
     <division id="53">Maserati</division> 
     <division id="26">Mazda</division> 
     <division id="61">McLaren</division> 
     <division id="27">Mercedes-Benz</division> 
     <division id="2">MINI</division> 
     <division id="29">Mitsubishi</division> 
     <division id="30">Nissan</division> 
     <division id="34">Porsche</division> 
     <division id="57">Ram</division> 
     <division id="49">Rolls-Royce</division> 
     <division id="52">Scion</division> 
     <division id="42">Smart</division> 
     <division id="37">Subaru</division> 
     <division id="56">Tesla</division> 
     <division id="39">Toyota</division> 
     <division id="40">Volkswagen</division> 
     <division id="41">Volvo</division> 
     </Divisions> 
'; 

$parse = simplexml_load_string($xml); 

print_r($parse); 

的問題是在於它的不守在XML屬性值,就像

<division id="1">Acura</division> 
<division id="44">Aston Martin</division> 

的PHP是消除它就像:

array (
    0 => 'Acura', 
    1 => 'Aston Martin' 
); 

我傳遞給JSON所以我需要它留在一個數組的格式,但需要我指定爲分部ID屬性的值。這就是它現在正在輸出:

SimpleXMLElement Object ( 
    [responseStatus] => SimpleXMLElement Object ( 
     [@attributes] => Array ( 
      [responseCode] => Successful 
      [description] => Successful 
     ) 
    ) 
    [division] => Array ( 
     [0] => Acura 
     [1] => Aston Martin 
     [2] => Audi 
     [3] => Bentley 
     [4] => BMW 
     [5] => Buick 
     [6] => Cadillac 
     [7] => Chevrolet 
     [8] => Chrysler 
     [9] => Dodge 
     [10] => Ferrari 
     [11] => FIAT 
     [12] => Ford 
     [13] => Freightliner 
     [14] => GMC 
     [15] => Honda 
     [16] => Hyundai 
     [17] => Infiniti 
     [18] => Isuzu 
     [19] => Jaguar 
     [20] => Jeep 
     [21] => Kia 
     [22] => Lamborghini 
     [23] => Land Rover 
     [24] => Lexus 
     [25] => Lincoln 
     [26] => Lotus 
     [27] => Maserati 
     [28] => Mazda 
     [29] => McLaren 
     [30] => Mercedes-Benz 
     [31] => MINI 
     [32] => Mitsubishi 
     [33] => Nissan 
     [34] => Porsche 
     [35] => Ram 
     [36] => Rolls-Royce 
     [37] => Scion 
     [38] => Smart 
     [39] => Subaru 
     [40] => Tesla 
     [41] => Toyota 
     [42] => Volkswagen 
     [43] => Volvo 
    ) 
) 

謝謝你的幫助!

回答

0

SimpleXML將您的<division>元素組創建出來並創建一個數組,並根據它認爲合適的方式分配索引。

你可以做的是巢的<id></id>和各<division></division>元素中<name></name>標籤,然後foreach您通過SimpleXMLObjects新陣列的方式,讓你的數據的方式。

所以,如果你有一個看起來像這樣的XML代碼:

<divisions> 
    <division> 
     <id>16</id> 
     <name>Honda</name> 
    </divsion> 
    <division> 
     <id>45</id> 
     <name>Bently</name> 
    </division> 
    <division> 
     <id>1</id> 
     <name>Acura</name> 
    </division> 
</divisions> 

你可以處理這樣的:

$xml = simplexml_load_file("divisions.xml"); 
$divisions = array(); 

foreach($xml as $division) 
{ 
    $divisions[(int)$division->id] = (string)$division->name; 
} 

var_dump($divisions); 

//Var dump will produce an array of... 

array (size=3) 
    16 => string 'Honda' (length=5) 
    45 => string 'Bently' (length=6) 
    1 => string 'Acura' (length=5) 

這將把所有的指標在正確的地方。

+0

問題是simplexml_load_string()...它擺脫了ID,所以之後的foreach沒有意義。我試過了,它只在var_dump上返回''。這不是來自文件,而是來自一個字符串。我的XML在load_string函數之前看起來不像你的。我不能像這樣輸出它,因爲我使用的API在我的第一篇文章中以格式輸出。我無法控制如何輸出。 – HaleyBuggs 2014-09-12 19:55:46