2016-04-05 9 views
0

i xml Zeile Spaltennamen mit Rohdaten haben Ich muss diese in wünschenswerte Array-Form konvertieren:convert XML-Daten in PHP-Array

<RETS ReplyCode="0" ReplyText="Operation Success."> 
<DELIMITER value="09"/> 
<COLUMNS> 
     AcresNum 
     ADAFeaturesYN 
     AdditionalFeatures 
    </COLUMNS> 
<DATA> 
    0.0000 0 Ceiling Fan,Granite Counters,Multiple Attics,Security System</DATA></RETS> 

I dies wie diese in Form von Array konvertieren:

array([0] => array(['AcresNum'] => 0.0000 , 
        ['ADAFeaturesYN'] => 0), 
     [1] => array(['AcresNum'] => 1.0000 , 
        ['ADAFeaturesYN'] => 1) 

    ); 
+1

Sie können 'simplexml_load_string' (http://php.net/manual/en/function.simplexml-load-string.php), wenn xml in String oder' simplexml_load_file' (http: // php .net/manual/en/function.simplexml-Last-file.php), wenn Sie xML-Datei sind – Apb

+0

ich habe versucht, aber kehrt, wie die Array ( [COLUMNS => \t AcresNum \t ADAFeaturesYN \t AdditionalFeatures \t Zusätzliche \t \t \t ) –

+0

Prozess 'Array ([COLUMNS => AcresNum \t ADAFeaturesYN \t Addition alFeatures AdditionalInformation) 'um das gewünschte Array zu erstellen – Apb

Antwort

0

können Sie verwenden simplexml_load_file

$file = 'test.xml'; 
if (file_exists($file)) { 
    $xml = simplexml_load_file($file); 
    print_r($xml); 
} else { 
    exit('Failed to open '.$file); 
} 
0

Hier ist eine Reihe von Funktionen, die eine beliebige XML-Daten in eine rekursive konvertieren Array, was auch immer die Tiefe und Komplexität ist. Einschließlich Tags, Eigenschaften usw. nennen Sie es ... Beachten Sie, dass alle Eigenschaften-Tags im Array mit @attributes als Schlüssel festgelegt sind, aber alles sein kann, was Sie möchten. in Ihrem Fall es

$result=xmlstr_to_array($xmlstring); 

Ones mit nennen es als ein Array umgewandelt s, manipulieren Sie Ihre Sachen, wie Sie möchten.

// load xml string 
    function xmlstr_to_array($xmlstr) { 
     $doc = new DOMDocument(); 
     $doc->loadXML($xmlstr); 
     return domnode_to_array($doc->documentElement); 
    } 

    // convert nodes 
    function domnode_to_array($node) { 
    $output = array(); 
    switch ($node->nodeType) { 
     case XML_CDATA_SECTION_NODE: 
     case XML_TEXT_NODE: 
      $output = trim($node->textContent); 
      break; 
     case XML_ELEMENT_NODE: 
      for ($i = 0, $m = $node->childNodes->length; $i < $m; $i++) { 
       $child = $node->childNodes->item($i); 
       $v = domnode_to_array($child); 
       if (isset($child->tagName)) { 
        $t = ConvertTypes($child->tagName); 
        if (!isset($output[$t])) { 
         $output[$t] = array(); 
        } 
        $output[$t][] = $v; 
       } elseif ($v) { 
        $output = (string) $v; 
       } 
      } 
      if (is_array($output)) { 
       if ($node->attributes->length) { 
        $a = array(); 
        foreach ($node->attributes as $attrName => $attrNode) { 
         $a[$attrName] = ConvertTypes($attrNode->value); 
        } 
        $output['@attributes'] = $a; 
       } 
       foreach ($output as $t => $v) { 
        if (is_array($v) && count($v) == 1 && $t != '@attributes') { 
         $output[$t] = $v[0]; 
        } 
       } 
      } 
      break; 
    } 
    return $output; 
} 

    //convert types 
    function ConvertTypes($org) { 
    if (is_numeric($org)) { 
     $val = floatval($org); 
    } else { 
     if ($org === 'true') { 
      $val = true; 
     } else if ($org === 'false') { 
      $val = false; 
     } else { 
      if ($org === '') { 
       $val = null; 
      } else { 
       $val = $org; 
      } 
     } 
    } 
    return $val; 
} 
+0

ich erreiche das bereits, aber ich habe eine Spalte wie dieses Array ([COLUMNS => AcresNum \t ADAFeaturesYN \t AdditionalFeatures AdditionalInformation) –

+0

In diesem Fall konvertieren Sie zuerst in Array und dann explodieren Sie Spalte Element in mehrere. – cpugourou

+0

Es ist eher eine Array-Funktion als ein XML-Problem. Dies zu tun, während das XML analysiert wird, ist zu schwierig. Teilen Sie den Prozess auf. – cpugourou