xml response verarbeiten

  • Hallo,


    kann mir bitte jemand verraten wie ich eine value aus einer xml responce in eine php variable wandele um diese verarbeiten zu können.


    Bsp:

    PHP
    1. <?xml version="1.0" encoding="ISO-8859-1"?>
    2. <report>
    3. <result>success</result>
    4. </report>


    Wie bekomme success in eine Variable s.B.: $result=succsess; ???


    Danke

  • Mit SimpleXML gehts so:

    PHP
    1. $xml = simplexml_load_file('DEINE.xml');
    2. $result = $xml->children()->result;


    mit

    PHP
    1. $result = $xml->children();


    in Deinem Fall sollte anstatt

    PHP
    1. simplexml_load_file

    das hier besser sein

    PHP
    1. simplexml_load_string


    Würdest du die Kind Nodes erhalten, weitere Infos: http://www.php.net/manual/de/ref.simplexml.php

  • Danke für deine Information, Hasan.


    Wenn ich es jetzt also richtig verstanden habe, muss es in dem Beispiel jetzt so aussehen:


    PHP
    1. $xml = simplexml_load_string('report');
    2. $result = $xml->children()->result;


    danach könnte ich dann mit

    PHP
    1. echo $report['result'];


    success ausgeben?

  • müsste

    PHP
    1. echo $report[0];

    sein, Lass Dir mal das ganze Objekt/Variable anzeigen.

  • Also das hatt alles wunderbar funktioniert, der String wird korrekt angezeigt, meine Frage ist jetzt noch wie ich an eine bestimmte Value rankomme:


    Das ist die Ausgabe mit print_r($data_result)


    wie komme ich den jetzt an den Wert value?

  • Sind das, sich wiederholende Elemente oder erhälts Du fix immer nur diese Struktur mit einem Ergebnis

  • ich bekomme immer diese Struktur, das einzigste was sich ändert ist die kundennummer

  • Mit

    PHP
    1. $xml->children()->KNOTEN

    erhälst Du alle Kind Elemente von dem gewünschten Knoten, in Deinem Fall wäre der

    PHP
    1. status

    also

    PHP
    1. $xml->children()->status

    Damit erhälst Du alle da drunter liegenden Elemente. Die Du wie oben abrufen kannst.

  • Wenn Du

    PHP
    1. value

    willst, dann

    PHP
    1. object

    ja. Immer den Knoten der da drüber liegt.

  • ne will nicht, wenn ich das so mache und das mit echo ausgeben lasse, bleibt es leer, auch wenn ich es als array anzeigen lasse bleibt es leer.

  • Dann musse wohl zwischen speichern und nochmals Child des übergeordneten Elements nehmen.

  • lieber zu spät wie nie, hbs gelöst, war dem Tag wohl schon etwas spät .....


    Da es ja schon ein xml String war, reichte ein simples

    PHP
    1. $kdrnr = $data_result->result->status->object->value;
    2. echo $kdnr;


    was mich aber zum nächsten Problem bring (nich direkt Problem, aber ich weis momentan nich wie ich es zusammenbringe). Bei einer Neubestellung muss ich per xml request Kundennummer und Bestellung übergeben. Wie kann ich das in einen Request zusammenbauen?


    Vom Ablauf her beim Neukunden:
    - xml-> Kundenanlegen auf response warten
    - aus dem responce die kundenummer nehmen und ins xml für die Bestellung packen (alles in einer Anfrage an die Schnittstelle). Das doofe ist ich kann die Bestellung nur mit einer Kundenummer an die Schnittstelle schicken.
    -kann man dem Script sagen "warte auf die Antwort mit der Kundenummer, wenn da benutze Kundennummer und setze Bestellung ab"


    Villeicht alles etwas kompliziert formuliert ...

  • Naja, warten alleine bringt ja nichts, bzw. wenn Du doch mit der Response von oben die Kundennummer hast, kannse ja nun Bestellnummer beipacken und mitschicken. Ansonsten vielleicht eine Seperate Methode/Funktion dafür verwenden und zwischen speichern. Ich weiß ja nicht was Du am wurschteln bist. Ich sags Dir mal, wie es z.B. beim Abgleich von Büro Plus Next und SelleBusiness z.B. war bzw ist.
    - Check auf neuen Kunden

    Quote

    Wenn neuer Kunde => Daten übernehmen => Erzeugte Kundennummer beim Kunden im Shop ablegen


    - Check auf neue Bestellung

    Quote

    Wenn neue Bestellung => überprüfen ob Kunde, anhand Dublettencheck oder customerID in der Wawi, ob vorhanden => wenn nein, Prozedre oben, ansonsten weiter => Bestellung importieren.

  • ich wurschtel einen automatischen Bestellablauf beim Großhändler zusammen, wo auch der komplette Lagerversand dranhängt (Fullfilment).
    aus dem response lass ich die Kundennummer nun in der db speichern.


    das ich es nicht zusammenbekomme, zumindest verstehe ich es noch nicht. Wie kann ich das in einem Ablauf bringen


    Ich hab hier schon einiges gelernt, das Forum ist hilfreicher wie die echten phpforen. Nur weis ich hier momentan nicht weiter und es würde mich freuen wenn Du mich hier in die richtige Richtung lenkst.

  • Bitte keine Funktionen in einander verschachteln, das wird nicht funktionieren. Du kannst mehrere Funktionen in einer Klasse zusammenfassen ala:


    Du kannst dann in der Klasse die Methoden (so werden Funktionen in Klassen genannt) mit

    PHP
    1. $this->MethodenName()

    aufgerufen.


    Aber in Deinem Fall ist ja nur eine Abhängigkeit gegeben, diese wäre

    PHP
    1. if (!empty($kdnr))
    2. bestellung_anlegen($kdnr);
  • Ok ich fasse die beiden Funtionen in einer Klasse zusammen.


    was ich aber jetzt nicht verstehe ist

    PHP
    1. if (!empty($kdnr))
    2. bestellung_anlegen($kdnr);


    wo muss ich das einsetzen? Das reicht damit die beiden Funktionen ausgeführt werden ?? Kannst Du mir das bitte etwas genauer erklären?

  • Es gibt zwei Möglichkeiten, entweder lässt Du es in der Klasse zusammen bauen und dem Object dran hängen, das würde z.B. so gehen, das Du die Aufrufe die Du hast in

    PHP
    1. __construct()

    verbaust ala

    PHP
    1. $data_result = $this->kunde_anlegen();
    2. $kdrnr = $data_result->result->status->object->value;
    3. if ($empty($kndr))
    4. $this->bestellung_anlegen($kdnr);


    Ansonsten kannst Du es wie Du es bereits hast auch von Extern aufrufen, ala

    PHP
    1. $foo = new neukunden_bestellung;
    2. $data_result = $foo->kunde_anlegen();
    3. $kdrnr = $data_result->result->status->object->value;
    4. if ($empty($kndr))
    5. $foo->bestellung_anlegen($kdnr);


    Nur für eine Richtung musst Du dich entscheiden, dazu Dir Deinen eigenen Stil und was für Dich flexibler ist aussuchen. Du kannst es in der Klasse auch von der jeweiligen voran gehenden Methode aufrufen lassen, wie auch die Variablen als Objekt Variablen verwenden.