2016-10-03 5 views
0

Ich habe XML-Datei wie folgt aus:Convert XML mehrdimensionales Array

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

Ich versuchte Element value.I zu bekommen wissen nicht, wie für jedes Feld Elementwert zu erhalten. So weit ich bin wie diese versuchen, es wird nur erhalten einen Attributwert:

<?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>"; 
} 

OUTPUT

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

Was ich will ist ausgegeben id=1 name=Steven Law ... id=3 name=mike pan position=office boy sein. Danach kann ich von Ausgabe zu einem Array machen.

Oh noch ein, erzähle mir bitte über verschiedene XMLDOM und SimpleXML. Ich weiß nicht, muss was wählen. Bitte helfen Sie mir

Antwort

1

Lesen der Wert kann mit DOMElement::nodeValue erfolgen:

<?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>"; 
} 

Hinweis

Um dies zu testen, hat das XML-Beispiel korrigiert werden: Im ersten Block die <input> Elemente geschlossen sind mit </field> . Dies muss in </input> geändert werden.

Sie haben nach einem Array gefragt. Es hängt davon ab, wie Sie die Daten in Ihrer Anwendung benötigen. Hier sind zwei Möglichkeiten, die Ihnen eine Vorstellung zu gehen geben sollte:

a) Erstellen eines Arrays (der einfache Weg)

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

Sie werden so etwas wie dieses:

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) Erstellen eines Arrays (bequemer später zu benutzen)

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

Hier gehen Sie zuerst durch Ihre <form> Elemente. Dann lesen Sie in jeder Form die <input> Elemente. So erhalten Sie einen Eintrag für jeden Formularblock mit den Eingängen:

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

Entschuldigung, es ist mein Fehler für geschlossen mit 'Feld'. danke ich werde es so bald wie möglich versuchen – Stfvns

+0

bitte helfen Sie mir auch. um ein Array zu erstellen. und erzähl mir von dom oder simplexml sollte ich benutzen müssen. Update Sie antworten bitte @akrys – Stfvns

+0

'Simplexml' ist einfacher zu codieren, 'domxml' ist ein wenig toleranter gegenüber kleineren XML-Fehlern. Es hängt davon ab, welche API Sie verwenden möchten. – akrys

-1

Versuchen Sie simplehtmldom es ist einfacher zu verwenden als xmldom oder simplexml. Sie sollten CSS-Selektoren verwenden können, um die benötigten Daten zu finden.

+0

Sie sagen mir nicht, den Code Elementwert zu erhalten. Die erste Frage betrifft den Code. Was ist einfach? Ich höre das nicht bis jetzt – Stfvns

+0

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