Petra: Array zu XML Problem / Verständnisfrage

Hallo ihr lieben,

ich habe eine kleine Verständnisfrage… Um aus einem Array XML zu erzeugen benutze ich folgende Funktion (diese stammt nicht von mir):

function array_to_xml($data,&$xml_data) {
	foreach($data as $key => $value) {
		if(is_numeric($key) ){
			$key = 'item'.$key;
		}
		if( is_array($value) ) {
			$subnode = $xml_data->addChild($key);
			array_to_xml($value, $subnode);
		} else {
			$xml_data->addChild("$key",htmlspecialchars("$value"));
		}
	}
}

Dieses funktioniert auch sehr gut (Eindimensionales assoziatives Array).

Nun möchte ich aber ein XML mit Datengruppen erzeugen also

<gruppe>
 <wertname>wert1</wertname>
</gruppe>
<gruppe>
 <wertname>wert2</wertname>
</gruppe>

Nun stehe ich aber vor dem Problem das ich mich frage wie ich das in dem Array anlegen soll.

Ich hoffe daher auf ein wenig Hilfe…

VG Petra

  1. Tach!

    Nun möchte ich aber ein XML mit Datengruppen erzeugen also

    <gruppe>
     <wertname>wert1</wertname>
    </gruppe>
    <gruppe>
     <wertname>wert2</wertname>
    </gruppe>
    

    Nun stehe ich aber vor dem Problem das ich mich frage wie ich das in dem Array anlegen soll.

    Wenn die Gruppe immer denselben Namen haben soll, geht das mit deiner Funktion nicht. Ein Array kann nicht mehrere Keys mit demselben Namen haben.

    dedlfix.

    1. Hallo,

      ganz genau das ist ja mein Problem wo ich ein bissel "Denkünterstüzung" brauche 😀

      LG Petra

      1. Tach!

        ganz genau das ist ja mein Problem wo ich ein bissel "Denkünterstüzung" brauche 😀

        Ja, dann erzähl wo es hängt. Und vor allem erzähl genauer, was Ausgangslage und was Ziel ist. Ich kann mir nur schwer vorstellen, dass es sinnvoll ist, jedes Element einzeln in ein weiteres zu packen, das "gruppe" heißt. Also wie sieht es wirklich aus? Wo sind Einzeldaten, wo sind es mehrere?

        dedlfix.

        1. Hallo,

          es sind jw. zu gruppierende Daten (aus DB / faktisch eine Row aus der DB). Das ganze soll am Ende die Ausgabe einer API sein…

          Momentan experimentiere ich damit einen String zu erzeugen und den mit simplexml_load_string entsprechend zu wandeln. Da stehe ich aber gerade vor dem Problem das ich bereits ein SimpleXMLElement erzeugt habe was auch bereits Daten enthält und ich nun meinen codierten String da reinhängen will…

          VG Petra

          1. Terry Pratchett hat das passende Zitat (in Wee Free Men) - hier leicht abgewandelt...

            Wenn Du Dir selbst vertraust
            Und an Deine Träume glaubst
            Und Deinem Stern folgst
            Und Dir viele Code-Beispiele von Tante Google liefern lässt

            Dann wirst Du trotzdem nicht drum herum kommen, auch mal die Dokumentation zu lesen.

            Am verlinkten Ort steht - inclusive Code-Beispiele - wie man Elemente mit Kind-Elementen erzeugt, bzw. einem existierenden SimpleXMLElement Child-Elemente hinzufügt.

            Rolf

  2. und wie sieht das Array dazu aus?

    1. Hallo nochmal,

      da ich mich (so glaube ich) entweder zu kompliziert ausgedrückt habe (oder denke...) hier der aktuelle Stand und damit auch die Fragestellung:

      Basierend auf der oben geposteteten Funktion erzeuge ich mein XML mit:

      header('Content-Type: text/xml');
      $xml_data = new SimpleXMLElement('<?xml version="1.0"?><data></data>');
      array_to_xml($retr,$xml_data);
      # $retr enthält das Wertearray
      echo $xml_data->asXML();
      

      Nun möchte ich (diese Lösung scheint mir am sinnvollsten) einen String den ich über eine Schleife bei der DB-Abfrage erzeuge selbigen als XML haben:

      simplexml_load_string($grbck);
      # $grbck enthält einen vorbereiteten String für die Umwandlung in XML
      

      Meine Frage wäre jetzt: ich müsste ja vor dem echo der $xml_data faktisch folgendes ausführen (und die bisher im Objekt abgelegten Daten ergänzen):

      if($grbck!='') #FÜGE DEM $xml_data HINZU# .= simplexml_load_string($grbck);
      

      Reicht hier ein simples $xml_data -> simplexml_load_string($grbck); oder ist das Quatsch?

      Oder sehe ich den Wald vor lauter Bäumen nicht mehr?

      LG Petra