PHP-Bibliothek zum Analysieren von XML mit Doppelpunkten in Tag-Namen? [duplicate]

Lesezeit: 3 Minuten

PHP Bibliothek zum Analysieren von XML mit Doppelpunkten in Tag Namen duplicate
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)?

  • 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

PHP Bibliothek zum Analysieren von XML mit Doppelpunkten in Tag Namen duplicate
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.

SimpleXMLElement::Kinder

924430cookie-checkPHP-Bibliothek zum Analysieren von XML mit Doppelpunkten in Tag-Namen? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy