将 XML 转换为多维数组

Convert XML to Multidimensional Array

我有 xml 个这样的文件:

<?xml version="1.0"?>
<table>
<form>
    <input name="id">1</input>
    <input name="name">Steven Law</input>
    <input name="position">Sales Manager</input>
</form>
<form>
    <input name="id">2</input>
    <input name="name">Martin Wow</input>
    <input name="position">Production</input>
</form>
<form>
    <input name="id">3</input>
    <input name="name">Mike Pan</input>
    <input name="position">Office boy</input>
</form>
</table>

我试图获取元素 value.I 不知道如何获取每个字段的元素值。到目前为止,我是这样尝试的,它只是获取一个属性值:

<?php
$dom = new DOMDocument();
$dom->load("data.xml");

$input = $dom->getElementsByTagName('input');
foreach($input as $inputs){
  $name= $inputs->getAttribute('name');
  //$value = $field->name('id');
  echo "$name =<br>";
}

输出

id =
name =
position =
id =
name =
position =
id =
name =
position =

我要的是会输出id=1 name=Steven Law ... id=3 name=mike pan position=office boy。在那之后,我可以从输出到一个数组。

哦,请告诉我不同​​的 XMLDOM 和 SimpleXML。我不知道必须选择什么。请帮助我

试试 simple_html_dom 它比 xml dom 或 simplexml 更容易使用。您应该能够使用 css 选择器来查找您需要的数据。

读取值可以用DOMElement::nodeValue:

<?php
$dom = new DOMDocument();
$dom->load("data.xml");

$input = $dom->getElementsByTagName('input');
foreach($input as $inputs){
  $name= $inputs->getAttribute('name');

  $value = $inputs->nodeValue; //reading the value
  echo "$name = $value<br>"; 
}

通知

为了测试这一点,必须更正 XML 示例:在第一个块中,<input> 元素用 </field> 关闭。这必须更改为 </input>.

您要求的是数组。这取决于您在应用程序中如何需要数据。 这里有两种可能性,应该会给你一个继续下去的想法:

a) 创建一个数组(最简单的方法)

<?php
$dom = new DOMDocument();
$dom->load("data.xml");

$array=array(); //init

$input = $dom->getElementsByTagName('input');
foreach($input as $inputs){
  $name= $inputs->getAttribute('name');
  $value = $inputs->nodeValue;

  //adding a value
  $array[]=array(
    'name' => $name,
    'value' => $value,
    );
}
// as an example, just print it
print_r($array);

你会得到这样的东西:

Array
(
    [0] => Array
        (
            [name] => id
            [value] => 1
        )

    [1] => Array
        (
            [name] => name
            [value] => Steven Law
        )

    [2] => Array
        (
            [name] => position
            [value] => Sales Manager
        )

    [3] => Array
        (
            [name] => id
            [value] => 2
        )

    [4] => Array
        (
            [name] => name
            [value] => Martin Wow
        )

    [5] => Array
        (
            [name] => position
            [value] => Production
        )

    [6] => Array
        (
            [name] => id
            [value] => 3
        )

    [7] => Array
        (
            [name] => name
            [value] => Mike Pan
        )

    [8] => Array
        (
            [name] => position
            [value] => Office boy
        )
)

b)创建数组(以后使用更方便)

<?php
$dom = new DOMDocument();
$dom->load("data.xml");

//init
$array=array();
//get all form tags
$forms=$dom->getElementsByTagName('form');
foreach($forms as $form) {
    //get all input-Tags from this form
    $input = $form->getElementsByTagName('input');

    //create an empty element
    $element=array();
    //walk through the input elements of the current form element
    foreach($input as $inputs){
      $name= $inputs->getAttribute('name');
      $value = $inputs->nodeValue;
      //add the data to the element
      $element[$name]=$value;
    }
    //add the element to your array
    $array[]=$element;
}
// as an example, just print it
print_r($array);

在这里,您将首先浏览 <form> 元素。然后,在每种形式中,您都阅读 <input> 元素。因此,您将获得包含输入的每个表单块的条目:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Steven Law
            [position] => Sales Manager
        )

    [1] => Array
        (
            [id] => 2
            [name] => Martin Wow
            [position] => Production
        )

    [2] => Array
        (
            [id] => 3
            [name] => Mike Pan
            [position] => Office boy
        )

)