Ich habe versucht zu verwenden SimpleXMLaber es scheint kein XML zu mögen, das so aussieht:
<xhtml:div>sample <xhtml:em>italic</xhtml:em> text</xhtml:div>
Welche Bibliothek verarbeitet Tags, die so aussehen (einen Doppelpunkt enthalten)?
mpen
Ich habe versucht zu verwenden SimpleXMLaber es scheint kein XML zu mögen, das so aussieht:
<xhtml:div>sample <xhtml:em>italic</xhtml:em> text</xhtml:div>
Welche Bibliothek verarbeitet Tags, die so aussehen (einen Doppelpunkt enthalten)?
Nathan
Sagen Sie, Sie haben einige XML wie diese.
<xhtml:div>
<xhtml:em>italic</xhtml:em>
<date>2010-02-01 06:00</date>
</xhtml:div>
Sie können wie folgt auf sie zugreifen: $xml->children('xhtml', true)->div->em;
aberwenn Sie das Datumsfeld möchten, dies: $xml->children('xhtml', true)->div->date;
wird nicht funktionierenweil Sie im xhtml-Namespace stecken bleiben.
Sie müssen ‘children’ erneut ausführen, um zum Standard-Namespace zurückzukehren:
$xml->children('xhtml', true)->div->children()->date;
nicht sicher, warum dies nicht die ausgewählte Antwort ist. Aber für jeden in der Zukunft ist dies derjenige, der meine Fragen/Probleme gelöst hat! 🙂
– daveomcd
18. Mai 2011 um 16:22 Uhr
Was ist mit mehreren Tags mit ‘:’? So versuchte ich, darauf zuzugreifen: $array['body']['Order']['Extensions']['data:AdditionalReferences']['data:YourRef']
– Benutzer2924019
10. März 2020 um 17:45 Uhr
Wenn Sie es schnell beheben möchten, tun Sie dies (Mache ich, wenn ich mich faul fühle):
// Will replace : in tags and attributes names with _ allowing easy access
$xml = preg_replace('~(</?|\s)([a-z0-9_]+):~is', '$1$2_', $xml);
Dies wird konvertieren <xhtml:
zu <xhtml_
und </xhtml:
zu </xhtml_
. Etwas hacky und kann fehlschlagen, wenn CDATA NameSpaced XML-Containerblöcke oder UNICODE-Tag-Namen beteiligt sind, aber ich würde sagen, Sie können es normalerweise sicher verwenden (hat mich noch nicht enttäuscht).
Funktioniert, aber es ist ein bisschen hacky.. den Inhalt meiner geschraubt <pubDate>
Tags und geänderte Zeit
– supersan
22. Juni 2017 um 4:47 Uhr
Doppelpunkt bezeichnet einen XML-Namensraum. Die Dom hat eine gute Unterstützung für Namespaces.
SimpleXML tut dies wahrscheinlich auch, aber das OP sucht nach einem Tag “xhtml:div” anstelle von nur “div”.
– Matthew Scharley
16. Oktober 2009 um 0:15 Uhr
SimpleXML hat etwas Dinge, um damit umzugehen, aber ich kann es immer noch nicht richtig zum Laufen bringen.
– mp
16. Oktober 2009 um 1:44 Uhr
Ich denke nicht, dass es eine gute Idee ist, den Doppelpunkt loszuwerden oder ihn durch etwas anderes zu ersetzen, wie einige Leute vorgeschlagen haben. Sie können problemlos auf Elemente zugreifen, die ein Namespace-Präfix haben. Sie können entweder die URL, die den Namespace identifiziert, als Argument an die children()-Methode übergeben oder das Namespace-Präfix und „true“ an die children()-Methode übergeben. Der zweite Ansatz erfordert PHP 5.2 und höher.
Bitte poste das entsprechende Code-Snippet. SimpleXML sollte keine Probleme mit Namespaces haben.
– Josh Davis
16. Oktober 2009 um 1:58 Uhr
Ich habe auch das gleiche Problem mit erlebt
SimpleXMLElement($data)
Zurückgeben von null, wenn die XML-Daten Doppelpunkte in den Tags enthalten.– Jake Wilson
12. Oktober 2012 um 19:11 Uhr