【问题标题】:How to convert xml string format to php array [closed]如何将xml字符串格式转换为php数组[关闭]
【发布时间】:2013-07-09 14:43:40
【问题描述】:

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

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 数组中获取它... 有什么想法吗???

【问题讨论】:

  • 查看simplexml
  • 你需要什么结构的数组?
  • 我只需要所有 ROW_DATA 信息 类似:` $room1_AMOUNT = $rooms[0]['AMOUNT_ROOMS']; $room2_AMOUNT = $rooms[1]['AMOUNT_ROOMS']; `

标签: php xml arrays


【解决方案1】:

imo,更好的方法是:

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

    $string = <<<XML
    <?xml version='1.0'?>
    ... // your xml here
    XML;
    
  2. 返回数组,而不是SimpleXMLElement Object,如果他需要的话,用

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

【讨论】:

  • 您好 vladkras 感谢您的回复。这个语法好吗?
  • @pey22 嗨,是的,(array) 是官方 php convertion(向下滚动到 转换为数组 部分),对于 simplexml,&lt;?xml version='1.0'?&gt; 也不是必需的,但我认为这是一种很好的编码风格
【解决方案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
                )

        )

)

【讨论】:

  • 哇感谢您的快速回复。现在我怎样才能在循环而不是在 print_r 中向浏览器显示它们?
  • @pey22 将其放入 foreach 并对其进行迭代...您可以在循环内回显到您的页面或分配变量以供以后使用。
【解决方案3】:

除了brbcoding的答案可以追加:

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

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

要将它们循环显示给浏览器,您可以获取部分 xml 使用方法 xpath 或使用 $xml->StartTime

之类的属性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 2015-08-17
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多