简体   繁体   English

如何使用PHP将XML转换为数组?

[英]How to convert XML into the array with PHP?

I'm trying to split an XML in the array, below is my php codes: 我正在尝试在数组中拆分XML,以下是我的php代码:

  <?php
     $xml = simplexml_load_file("test.xml") or die("Error: Cannot create object");

     foreach($xml->children() as $books) { 
        echo $books->title . "<br> "; 
        echo $books->tutor . "<br> "; 
        echo $books->duration . "<br> ";
        echo $books->price . "<hr>"; 


     }
  ?>

Below is my XML codes: 以下是我的XML代码:

<?xml version = "1.0" encoding = "utf-8"?>
<tutorialspoint>

<course category = "JAVA">
  <title lang = "en">Java</title>
  <tutor>Gopal</tutor>
  <duration>3</duration>
  <price>$30</price>
</course>

<course category = "HADOOP">
  <title lang = "en">Hadoop</title>.
  <tutor>Satish</tutor>
  <duration>3</duration>
  <price>$50</price>
</course>

<course category = "HTML">
  <title lang = "en">html</title>
  <tutor>raju</tutor>
  <duration>5</duration>
  <price>$50</price>
</course>

<course category = "WEB">
  <title lang = "en">Web Technologies</title>
  <tutor>Javed</tutor>
  <duration>10</duration>
  <price>$60</price>
</course>

</tutorialspoint>

But it gave the output show me in below: enter image description here 但是它在下面显示了输出: 在此处输入图像描述

I want to convert XML into the array with PHP, but can't work. 我想用PHP将XML转换为数组,但无法正常工作。 Actually the output I want like in below example codes: 实际上,我想要的输出如以下示例代码所示:

Array
(
[0] => Array
    (
        [title] => Java
        [tutor] => Gopal
        [duration] => 3
        [price] => $30
    )

[1] => Array
    (
        [title] => Hadoop
        [tutor] => Satish
        [duration] => 3
        [price] => $50
    )

[2] => Array
    (
        [title] => HTML
        [tutor] => raju
        [duration] => 5
        [price] => $50
    )

[3] => Array
    (
        [title] => Web Technologies
        [tutor] => Javed
        [duration] => 10
        [price] => $60
    )

I don't know how to set them into the array like above the example output. 我不知道如何像上面的示例输出一样将它们设置到数组中。 Hope someone can help me. 希望可以有人帮帮我。 Thanks. 谢谢。

This code snippet will convert your XML to array 此代码段会将您的XML转换为数组

$array = json_decode(json_encode((array)simplexml_load_string($xml)),true);
echo '<pre>';
print_r($array);

You can json_encode() then json_decode() as array and use simplexml_load_string() 您可以json_encode()然后json_decode()作为数组并使用simplexml_load_string()

Steps: 脚步:

1) First convert your XML into readable string object using simplexml_load_string() . 1)首先使用simplexml_load_string()将XML转换为可读的字符串对象。

2) Then json_encode() it. 2)然后json_encode()它。

3) json_decode() it, with second parameter TRUE , which will return array instead of object. 3) json_decode() ,带有第二个参数TRUE ,它将返回数组而不是对象。

4) Now, your XML is converted into an array. 4)现在,您的XML被转换为数组。

5) Take a blank array, loop over array from above code and append elements to it. 5)取一个空白数组,从上面的代码中循环遍历数组,并将元素附加到其中。

To get desired output: 要获得所需的输出:

<?php
$xml = '<?xml version = "1.0" encoding = "utf-8"?>
<tutorialspoint>

<course category = "JAVA">
  <title lang = "en">Java</title>
  <tutor>Gopal</tutor>
  <duration>3</duration>
  <price>$30</price>
</course>

<course category = "HADOOP">
  <title lang = "en">Hadoop</title>.
  <tutor>Satish</tutor>
  <duration>3</duration>
  <price>$50</price>
</course>

<course category = "HTML">
  <title lang = "en">html</title>
  <tutor>raju</tutor>
  <duration>5</duration>
  <price>$50</price>
</course>

<course category = "WEB">
  <title lang = "en">Web Technologies</title>
  <tutor>Javed</tutor>
  <duration>10</duration>
  <price>$60</price>
</course>
</tutorialspoint>';

$arr = [];
$array = json_decode(json_encode(simplexml_load_string($xml)),true);
if ( ! empty($array)) {
 $i=0;
 foreach ($array['course'] as $elem) {
   $arr[$i]['title'] = $elem['title'];
   $arr[$i]['tutor'] = $elem['tutor'];
   $arr[$i]['duration'] = $elem['duration'];
   $arr[$i]['price'] = $elem['price'];
  ++$i;
 }
}
echo '<pre>';print_r($arr);echo '</pre>';

Output: 输出:

Array
(
    [0] => Array
        (
            [title] => Java
            [tutor] => Gopal
            [duration] => 3
            [price] => $30
        )

    [1] => Array
        (
            [title] => Hadoop
            [tutor] => Satish
            [duration] => 3
            [price] => $50
        )

    [2] => Array
        (
            [title] => html
            [tutor] => raju
            [duration] => 5
            [price] => $50
        )

    [3] => Array
        (
            [title] => Web Technologies
            [tutor] => Javed
            [duration] => 10
            [price] => $60
        )

)

Working Code: 工作代码:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM