simplexml_load_string parst die attribute von den values nich sondern stopft nur die elementnamen in einen object / array mix. Besser ist, du benutzt die ->children() Methode auf SimpleXmlObject-Elemente. Schau mal, das hier ist die Struktur von deinem Objekt
Wie du siehst, werden die Attribute nicht umgesetzt. PHP hat probleme damit, den Bindestrich ( custom-attributes) richtig um zu setzen. Hier ein funktionierendes Codebeispiel:
foreach ($data->store as $person) { // ->children() gets all child elements of node <customattributes> foreach ($person->customattributes->children() as $customAttribute) { // ->attributes() gets all attributes of current node as object echo $customAttribute->attributes()->attributeid.' : ' . $customAttribute. '<br />'; } }
?>
Anmerkung: Ich habe die Bindestriche entfernt weil mir PHP bei folgender Zeile Fehler geschmissen hat: "$person->custom-attributes->children()"
Update: So klappt es mit den Bindestrichen:
foreach ($data->store as $person) { // ->children() gets all child elements of node <customattributes> foreach ($person->{'custom-attributes'}->children() as $customAttribute) { // ->attributes() gets all attributes of current node as object echo $customAttribute->attributes()->attributeid.' : ' . $customAttribute. '<br />'; } }
Ausgabe:
country : Deutschland displayWeb : false
Update 2: Um via xpath alle 'custom-attribute' Elemente zu erhalten die als attributeid den Wert 'displayWeb' haben, kannst du folgenden Code verwenden:
$element = $data->xpath("//custom-attribute[@attributeid='displayWeb']"); echo $element[0]; // das nächste element wäre dann [1], wenn es mehrere gibt ...
Ausgabe: false
Weitere Informationen zu Simple-XML findest du übriegens hier: Simple-XML Weitere Informationen zum Syntax von XPath findest du zum Beispiel hier: XPath Syntax
Beste Grüße
PS: Ein wenig mehr Eigeninitiative beim Lösen deiner Probleme würden dir helfen schneller ein besserer Entwickler zu werden - Nicht böse gemeint, nur ein gut gemeinter Ratschlag.
im aktuellen code werden alle werte von den "custom-attributes" ausgegeben. ich möchte aber ganz speziel den wert "false", in diesem fall, vom attribute "displayWeb" ausgeben lassen.
Ja kein Wunder... weil es totaler quatsch ist wie du den Syntax benutzt :( Ich update meine Antwort oben. Bitte benutzte das nächste mal öfter die Edit Funktion um Nachträge deiner Antwort hinzuzufügen anstatt immer wieder neue Beiträge zu verfassen.
Kennst du denn auch einen Weg das Problem zu lösen mit dem Bindestrich?