SimpleXMLElement

Hallo,

ich habe folgendes XML Object und möchte auf „A Textbook of Sources for Teachers and Teacher-Training Classes“ zugreifen. Wie bewerkstellige ich das? Laut php manual kann ich mit dem Operator „->“ darauf zugreifen. Wenn ich aber beispielsweise auf $i-> 0 ausführe, bringt er mir einen Fehler, weil es kein String ist. Führe ich $i-> „0“ aus, ist mein Ergebnis null.

SimpleXMLElement Object ( [@attributes] => Array ( [id] => t2 ) [0] => A Textbook of Sources for Teachers and Teacher-Training Classes )

Danke im Voraus

Gruß
[FONT=Menlo][COLOR=rgb(0, 0, 0)][/FONT]

Darf ich mal fragen wie die XML denn aussieht, ich finde es irgendwie komisch dass die xml so folgendes Tag haben soll

<0>A Textbook of Sources for Teachers and Teacher-Training Classes</0>

Sry, falsch ausgedrückt. Es war ursprünglich ein XML. Es ist nun ein SimpleXMLElement Object.

Irgendwie hab ich gerade diese aberwitzige Idee mit
$i->(string)0
Aber das wird sicher nicht klappen :smiley:

Versuch es sonst mal mit Xpath

Ansonsten wie gesagt finde ich den Aufbau der XML etwas verstörend :smiley: Hast du diese XML gebaut oder bekommst du diese durch eine Schnittstelle oder dergleichen.
Denn wie gesagt
<0>A Textbook of Sources for Teachers and Teacher-Training Classes</0>

so hab ich das noch nie in einer XML gesehen, aber ich könnte mich auch gerade irren wegen dem Objectaufbau

Ich bekomme das xml aus einem Epub extrahiert.

Nah dran… :wink:
PHP$i->0[/PHP]

Sollte hinhauen

Das wird aber nicht klappen, da eine variable nicht mit einer Zahl anfangen darf. Also darf nach → keine 0 erscheinen. Wenn man
nun davon ausgehen würde, es würde klappen, würde
$i->0
kein string zurückliefern sondern ein Simplexml Object, mit (string)$i->0 castest du das object aber als string so das kein
Object mehr rauskommt sondern nur den Satz

EDIT:
das was mir noch einfällt ist, man könnte das Object als Array casten und so an den Wert bzw. an den String kommen.

[B][I]mail at kleineedv dot de[/I][/B]
4 years ago
I had a problem with simplexml reading nodes from an xml file. It always return an SimpleXML-Object but not the text inside the node.

Example:

<?xml version="1.0" encoding="UTF-8"?> 123

Reading this xml into a variable called $xml and then doing the following

<?php $myId = $xml->Id; ?> Did not return 123 in $myId, but instead I got a SimpleXMLElement Object.

The solution is simple, when you know it. Use explicit string conversion.

<?php $myId = (string)$xml->Id; ?>

Quelle

Ja, das stimmt. Jedoch war das nicht das Problem des Threaderstellers :wink:

Ahhhhh… jetzt komm ich auch mit :slight_smile:

Seine ausgabe kommt ja von

[PHP]
print_r($xml);
[/PHP]
Würde dann nicht ein einfaches

[PHP]
(string)$xml[0];
[/PHP]
Zum Ziel führen?
Weil ein XML-Tag mit 0 ist nicht erlaubt.

[SIZE=5]XML Naming Rules[/SIZE]
XML elements must follow these naming rules:

[ul]
[li]Names can contain letters, numbers, and other characters[/li][li]Names cannot start with a number or punctuation character[/li][li]Names cannot start with the letters xml (or XML, or Xml, etc)[/li][li]Names cannot contain spaces[/li][/ul]
Any name can be used, no words are reserved.

http://www.w3schools.com/xml/xml_elements.asp

Das weiß ich nun so aus dem Kopf nicht. Denn $xml enthält ja das Object. Ich weiß das man ein Object als array casten kann, aber ob es direkt so funktioniert kann ich nun net sagen.

Aber ich denke weitere Diskussionen sind ohne Sinn, da der Threadersteller sich auch nicht mehr gemeldet hat. Also hat er es wohl anders gelöst :slight_smile: