SimpleXMLElement zu PHP-Array [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
Codex73

Variable $d kommt von file_get_contents Funktion zu einer URL.

$answer = @new SimpleXMLElement($d);

Unten ist die Ausgabe von print_r($answer):

SimpleXMLElement Object
(
  [Amount] => 2698
  [Status] => OK
  [State] => FL
  [Country] => USA
)

Wie kann ich den Wert jedes Elements abrufen und zu einem Array hinzufügen? Ich kann es nicht herausfinden.

Benutzer-Avatar
dkinzer

In diesem einfachen Fall funktioniert Type Casting auch:

$my_array = (array)$answer

  • Dies ist nicht rekursiv.

    – Jehong Ahn

    5. Januar 2021 um 5:37 Uhr

Das sollte funktionieren:

$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

  • Ich habe es gerade getestet und das funktioniert. Macht es sogar rekursiv, was großartig ist. Ich mache mir jedoch Sorgen darüber, was im Falle eines Nicht-UTF-8-Zeichens passieren wird. Das json_encode und json_decode Methoden neigen dazu, zu ersticken, wenn sie auf ein Nicht-UTF-8-Zeichen stoßen. Einhüllen in a try...catch wäre klug, obwohl ich nicht weiß, ob es eine Möglichkeit gäbe, damit richtig umzugehen (dh in UTF-8 zu codieren), ohne einen benutzerdefinierten Parser zu schreiben.

    – Josch

    9. März 2015 um 22:53 Uhr


  • Beide json_encode und http_build_query offenbar Probleme mit dem Dolmetschen haben <![CDATA[ ]]> Stichworte. Es scheint, dass beide Funktionen sie als leere Objekte bestimmen, in diesem Fall http_build_query ignoriert es komplett.

    – Shaun Cockerill

    8. Februar 2018 um 1:37 Uhr

Benutzer-Avatar
ZZ-Codierer

Das $answer kann bereits als Array arbeiten. Sie können dies tun, wenn Sie es in ein echtes Array einfügen möchten.

$array = array();
foreach($answer as $k => $v) {
  $array[$k] = $v;
}

  • Ich kann ein SimpleXMLElement-Objekt nicht auf folgende Weise durchlaufen

    – Adam Baranyai

    11. Mai 2016 um 13:20 Uhr

Benutzer-Avatar
Bo Pennings

Ich habe ein Problem mit dieser Funktion, da die Typumwandlung jedes XML-Kindes in ein Array problematisch sein kann, wenn der Text dazwischen liegt CDATA Stichworte.

Ich habe dies behoben, indem ich überprüft habe, ob das Ergebnis der Typumwandlung in ein Array leer ist. Wenn dies der Fall ist, wandeln Sie es in eine Zeichenfolge um, und Sie erhalten ein korrektes Ergebnis.

Hier ist meine modifizierte Version mit CDATA Unterstützung:

function SimpleXML2ArrayWithCDATASupport($xml)
{   
    $array = (array)$xml;

    if (count($array) === 0) {
        return (string)$xml;
    }

    foreach ($array as $key => $value) {
        if (!is_object($value) || strpos(get_class($value), 'SimpleXML') === false) {
            continue;
        }
        $array[$key] = SimpleXML2ArrayWithCDATASupport($value);
    }

    return $array;
}

Benutzer-Avatar
Benutzer2960279

Diese Funktion analysiert ein xml simpleXML rekursiv in ein rekursives Array

function SimpleXML2Array($xml){
    $array = (array)$xml;

    //recursive Parser
    foreach ($array as $key => $value){
        if(strpos(get_class($value),"SimpleXML")!==false){
            $array[$key] = SimpleXML2Array($value);
        }
    }

    return $array;
}

  • Ich habe ein Problem mit dieser Funktion, da die Typumwandlung jedes untergeordneten XML-Elements in ein Array zu Problemen führen kann, wenn sich der Text zwischen CDATA-Tags befindet.

    – Bo Pennings

    23. Juli 2014 um 19:56 Uhr

  • Ich habe ein Problem mit dieser Funktion, da die Typumwandlung jedes untergeordneten XML-Elements in ein Array zu Problemen führen kann, wenn sich der Text zwischen CDATA-Tags befindet.

    – Bo Pennings

    23. Juli 2014 um 19:56 Uhr

1014880cookie-checkSimpleXMLElement zu PHP-Array [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy