如何将xml字符串格式转换为php数组

时间:2013-07-09 14:43:41

标签: php xml arrays

你好我有php var(string)看起来像xml: 它不是真正的xml文件只是php字符串,具有与xml相同的结构。 我需要在php循环中从它获取ROW_DATA字段。 (这是我从肥皂网服务获得的xml结构)。

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

<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数组中得到这个... 任何想法,请????

3 个答案:

答案 0 :(得分:4)

imo,更好的方法是:

  1. 将heredoc与xml定义一起使用

    $string = <<<XML
    <?xml version='1.0'?>
    ... // your xml here
    XML;
    
  2. 返回数组,如果需要,则返回SimpleXMLElement Object

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

答案 1 :(得分: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
                )

        )

)

答案 2 :(得分:0)

除了回答brbcoding可以追加:

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

这会将数据作为数组返回。

要在循环中将它们显示到浏览器,您可以获得部分xml 方法 xpath 或者使用像$ xml-&gt; StartTime

这样的属性