Objektnamen mit Minuszeichen
Lukas Stadler
- php
0 Manuel B.0 wahsaga0 Mathias Brodala0 dedlfix
Hi Zusammen
Ich lese mittels
$xmlstr = simplexml_load_file("test.xml");
eine XML-Datei ein und möchte diese weiterverarbeiten.
Nun hab ich in der XML-Datei Objekte, welche einen Bindestrich haben also z.B. <batch-id>. will ich auf diese Zugreiffen, bekomme ich nichts zurück obwohl etwas steht. wenn ich das Objekt auf <batchid> ändere funktioniert es und der Inhalt wird korrekt zurückgegeben.
Folgendes Beispiel:
-------------
<?xml version="1.0" encoding="US-ASCII" ?>
<switch-drs>
<version>1.0</version>
<reply>
<batch-id>400</batch-id>
</reply>
</switch-drs>
-------------
Mein PHP-Code dazu:
$xmlstr = simplexml_load_file("test.xml");
echo $xmlstr->reply->batch-id; //Batch-ID auslesen
-------------
ist im xml-Code der tag <batch-id> auf <batchid> und im php-Code echo xmlstr->reply->batchid; dann geht es.
Nun hab ich das Problem dass ich das xml-File so bekomme (also die DTD nicht beeinflussen kann)
kann ich den PHP aufruf irgendwie anpassen, damit es mit batch-id geht? oder geht es nur, indem ich den eingelesenen string filtere...
Vielen Dank
Ich grüsse den Cosmos,
ist im xml-Code der tag <batch-id> auf <batchid> und im php-Code echo xmlstr->reply->batchid; dann geht es.
Was sagt uns das? Richtig. Ein "-" ist nicht erlaubt. Ersetzte es durch einen Unterstrich oder lass es weg.
Möge das "Self" mit euch sein
Was sagt uns das? Richtig. Ein "-" ist nicht erlaubt. Ersetzte es durch einen Unterstrich oder lass es weg.
Das Problem ist, dass ich die Notation nicht beeinflussen kann. Ich musss demnach das ganze xml-Dokument zuerst nach "-"Zeichen durchkämmen und diese Rausfiltern... finde ich absolut nicht brauchbar!
Kann man nicht irgendwie mit escape-Zeichen arbeiten?
hi,
echo $xmlstr->reply->batch-id; //Batch-ID auslesen
Das heißt für PHP, dass es von $xmlstr->reply->batch den Wert der Konstanten id abziehen soll.
gruß,
wahsaga
Hallo Lukas.
<?xml version="1.0" encoding="US-ASCII" ?>
<switch-drs>
<version>1.0</version>
<reply>
<batch-id>400</batch-id>
</reply>
</switch-drs>
[…]
kann ich den PHP aufruf irgendwie anpassen, damit es mit batch-id geht? oder geht es nur, indem ich den eingelesenen string filtere...
Du könntest an Stelle von simplexml DOM verwenden:
$str_doc = '<?xml version="1.0" encoding="US-ASCII" ?>
<switch-drs>
<version>1.0</version>
<reply>
<batch-id>400</batch-id>
</reply>
</switch-drs>';
$obj_doc = new DOMDocument();
$obj_doc->loadXML($str_doc);
echo $obj_doc->getElementsByTagName('batch-id')->item(0)->nodeValue; # 400
Einen schönen Mittwoch noch.
Gruß, Mathias
Hallo Lukas.
<?xml version="1.0" encoding="US-ASCII" ?>
<switch-drs>
<version>1.0</version>
<reply>
<batch-id>400</batch-id>
</reply>
</switch-drs>
[…]
kann ich den PHP aufruf irgendwie anpassen, damit es mit batch-id geht? oder geht es nur, indem ich den eingelesenen string filtere...
Du könntest an Stelle von simplexml DOM verwenden:
$str_doc = '<?xml version="1.0" encoding="US-ASCII" ?>
<switch-drs>
<version>1.0</version>
<reply>
<batch-id>400</batch-id>
</reply>
</switch-drs>';$obj_doc = new DOMDocument();
$obj_doc->loadXML($str_doc);echo $obj_doc->getElementsByTagName('batch-id')->item(0)->nodeValue; # 400
>
>
> Einen schönen Mittwoch noch.
>
> Gruß, Mathias
dann werd ich das wohl so machen.
Vielen Dank!
echo $begrüßung;
kann ich den PHP aufruf irgendwie anpassen, damit es mit batch-id geht?
Die Antwort steht in Form eines Userkommentars im PHP-Handbuch.
echo "$verabschiedung $name";