2013-07-09 89 views
0

你好我有php var(字符串)看起來像xml: 它不是真正的XML文件只是PHP的字符串像XML一樣的結構。 我需要從php循環中獲取ROW_DATA字段。 (這是從soap web服務獲得的xml結構)。如何將xml字符串格式轉換爲php數組

2013年7月9日10時01分29秒 上午 2013年7月9日10時01分29秒 上午

<ROW_DATA> 
    <AMOUNT_ROOMS>2</AMOUNT_ROOMS> 
    <SUPP_MOVIE_NAME>tiz</SUPP_MOVIE_NAME> 
    <AMOUNT_NIS>3680</AMOUNT_NIS> 
    <PRICE_DOCKET_ID>1233</PRICE_DOCKET_ID> 
</ROW_DATA> 

<ROW_DATA> 
    <AMOUNT_ROOMS>1</AMOUNT_ROOMS> 
    <SUPP_MOVIE_NAME>mantiz</SUPP_MOVIE_NAME> 
    <AMOUNT_NIS>3690</AMOUNT_NIS> 
    <PRICE_DOCKET_ID>1234</PRICE_DOCKET_ID> 
</ROW_DATA> 

<StartTime>7/9/2013 
    10:01:29 
    AM</StartTime> 
<EndTime>7/9/2013 
    10:01:30 
    AM</EndTime> 

現在我需要得到這個php數組... 任何想法請?

+1

退房[simplexml的(http://us1.php.net/simplexml) – brbcoding

+0

你需要什麼結構陣列的? – vladkras

+0

我只需要所有ROW_DATA信息例如: ' $ room1_AMOUNT = $ rooms [0] ['AMOUNT_ROOMS']; $ room2_AMOUNT = $ rooms [1] ['AMOUNT_ROOMS']; ' – pey22

回答

2

海事組織,更好的辦法是:

  1. 使用定界符與XML定義

    $string = <<<XML 
    <?xml version='1.0'?> 
    ... // your xml here 
    XML; 
    
  2. 返回的數組,而不是SimpleXMLElement Object如果他需要它,與

    $xml = (array)simplexml_load_string($string);

+0

你好vladkras感謝您的答覆。 這個語法可以嗎? – pey22

+0

@ pey22嗨,是的,'(陣列)'是官方的PHP [轉換](http://www.php.net/manual/en/language.types.array.php)(向下滾動到_Converting到array_部分) ,也是'<?xml version ='1.0'?>'對於simplexml不是必需的,但我認爲這是一種很好的編碼風格 – vladkras

2
$str = '<ROOT> 
    <StartTime>7/9/2013 
     10:01:29 
     AM</StartTime> 
    <EndTime>7/9/2013 
     10:01:29 
     AM</EndTime> 

    <ROW_DATA> 
     <AMOUNT_ROOMS>2</AMOUNT_ROOMS> 
     <SUPP_MOVIE_NAME>tiz</SUPP_MOVIE_NAME> 
     <AMOUNT_NIS>3680</AMOUNT_NIS> 
     <PRICE_DOCKET_ID>1233</PRICE_DOCKET_ID> 
    </ROW_DATA> 

    <ROW_DATA> 
     <AMOUNT_ROOMS>1</AMOUNT_ROOMS> 
     <SUPP_MOVIE_NAME>mantiz</SUPP_MOVIE_NAME> 
     <AMOUNT_NIS>3690</AMOUNT_NIS> 
     <PRICE_DOCKET_ID>1234</PRICE_DOCKET_ID> 
    </ROW_DATA> 

    <StartTime>7/9/2013 
     10:01:29 
     AM</StartTime> 
    <EndTime>7/9/2013 
     10:01:30 
     AM</EndTime> 

</ROOT>'; 

$xml = simplexml_load_string($str); 
print_r($xml); 

輸出:

SimpleXMLElement Object 
(
    [StartTime] => Array 
     (
      [0] => 7/9/2013 
     10:01:29 
     AM 
      [1] => 7/9/2013 
     10:01:29 
     AM 
     ) 

    [EndTime] => Array 
     (
      [0] => 7/9/2013 
     10:01:29 
     AM 
      [1] => 7/9/2013 
     10:01:30 
     AM 
     ) 

    [ROW_DATA] => Array 
     (
      [0] => SimpleXMLElement Object 
       (
        [AMOUNT_ROOMS] => 2 
        [SUPP_MOVIE_NAME] => tiz 
        [AMOUNT_NIS] => 3680 
        [PRICE_DOCKET_ID] => 1233 
       ) 

      [1] => SimpleXMLElement Object 
       (
        [AMOUNT_ROOMS] => 1 
        [SUPP_MOVIE_NAME] => mantiz 
        [AMOUNT_NIS] => 3690 
        [PRICE_DOCKET_ID] => 1234 
       ) 

     ) 

) 
+0

WOW感謝您的快速回復。 現在我怎麼能顯示他們瀏覽器在循環不在print_r? – pey22

+0

@ pey22把它扔到foreach中並迭代它...你可以在循環內部回顯你的頁面或者指定稍後使用的變量。 – brbcoding

0

在addion回答brbcoding的可以追加:

print_r($xml->xpath('/ROOT')); 

這將返回數據作爲數組。

要在循環顯示他們的瀏覽器,你可以得到XML 的部位與方法的XPath 或類似$ XML的性能>開始時間

相關問題