PHP und XML

Fruitgum

Erfahrenes Mitglied
Guten Morgän,

Ich habe schon gesucht bin aber nicht fündig geworden. Ich lese eine XML-Datei aus und das gelingt mir auch.

PHP:
foreach ($xml->resultset->record as $ewu) {
           $id   = $ewu->field[0]->data;
           $inhalt = $ewu->field[1]->data;
        echo "id : ".$id." Inhalt : ".$inhalt."<br />";
    }

jetzt zu XML. Wenn einer meint das sie vielleicht ein anderes Format haben könnte, liegt er zwar nicht falsch, aber leider wird diese XML von einer Filemakerdatenbank generiert und die liefert mir nun mal die XML nur in dieser Struktur.

Nun hier mal ein kleiner Ausschnitt:

HTML:
....

</metadata>
<resultset count="3" fetch-size="3">
<record mod-id="37" record-id="55735">
<field name="Datum">
<data>
09/15/2010
</data>
</field>
<field name="ID_Kurs2">
<data>
897987923845
</data>
</field>
<field name="Bezeichnung">
<data>
Hier steht ein kleiner Text mit lauter lustigen Erklärungen.
</data>
</field>
<field name="Endedatum">

.....

Nun haben einige Tags eine ID (name="") kann ich diese ID geziehlt ansprechen? Habe schon alles versucht. Und kann ich zb. bei <resultset count="3"... den count ansprechen zb, gib mir resultset 2 zurück?

Grüße
 
Was ist in deinem Beispiel das resultset 2?

Ich versteh deine Frage nicht wirklich

Nachtrag:
So kommst du auf die Count-Information:
PHP:
$attributes=$xml->resultset->attributes();
echo $attributes['count'];
 
Zuletzt bearbeitet:
Na ich möchte wissen wie ich das realisieren kann, das ich gezielt resultset count ansprechen kann. Da mir das die Anzahl der Einträge ausgibt. Also ich möchte gern resultset count 4 abrufen.

und bei den anderen Einträgen rufe ich das ja zb mit $id = $ewu->field[0]->data; ab. ich möchte aber nicht 0 haben sondern sowas wie field['bezeichnung']; abrufen, da es in der xml ein tag mit der id (name="bezeichnung") gibt.
 
eine Möglichkeit ist über einen selbst erstellten Index
PHP:
$xml = simplexml_load_file('test.xml');

//Index zusammenstellen
$index = 0;
$fieldNameIndex = array();
foreach($xml->resultset->record[0]->field as $field){
    $attributes = $field->attributes();
    $fieldNameIndex[(String)$attributes['name']] = $index++; 
}

foreach ($xml->resultset->record as $ewu) {
    //Auswahl über Index
    echo (String) $ewu->field[$fieldNameIndex['ID_Kurs2']]->data;

}
 
Da ist mir noch was in den Sinn gekommen. Mit xPath löst sich definitv eleganter
PHP:
foreach($xml->resultset->record as $record){
    $datum =    getField($record, 'Datum');
    $id =       getField($record, 'ID_Kurs2');
    $inhalt =   getField($record, 'Bezeichnung');

    echo "id : ".$id." Inhalt : ".$inhalt."<br />";
}

/**
 * @name  getValueWithXPath
 * @param $node     SimpleXMLElement    SimpleXMLElement von dem her gesucht werden soll
 * @param $name     String              Name des Feldes
 * @return          String              Inhalt des gefundenen SimpleXMLElement
 */
function getField(SimpleXMLElement $node, $name){
    $data = $node->xpath("child::field [@name='{$name}']/child::data");
    return trim($data[0]);
}
 
Yaslaw, wie immer eine gute Hilfe. Danke dir Man! Und das xpath macht es wirklich schön schlank und übersichtlich...

Grüße :)
 
Zurück