2016-10-03 125 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