2016-10-03 116 views
0

我的XML文件是这样的:转换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。我不知道必须选择什么。请帮我

回答

1

读取值可以与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>。您要求一个数组。这取决于您在应用程序中如何需要数据。 这里有两种可能性,这应该给你一个想法去:

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

<?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 
     ) 

) 
+0

对不起,这是我用'field'关闭的错误。谢谢,我会尽快尝试 – Stfvns

+0

请帮助我。做一个数组。并告诉我关于dom或simplexml应该我必须使用。请更新您的答案@akrys – Stfvns

+0

'simplexml'更易于编写代码,'domxml'对较小的XML错误更容易一点。这取决于您想使用哪个API。 – akrys

-1

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

+0

你不告诉我获取元素值的代码。点的问题是关于代码的。什么simplehtmldom?直到现在我还没有听到 – Stfvns

+0

http://simplehtmldom.sourceforge.net/ http://simplehtmldom.sourceforge.net/manual.htm – alanmbarr