2010-05-21 4 views
5

Für die Interaktion mit einer Kundenanwendung verwenden wir XML-Dokumente. Das heißt, wir senden ein XML über HTTP und erhalten auf dieselbe Weise ein Antwort-XML-Dokument. Der Kunde hat zwei XML-Schemata angegeben, die das Format der Anforderung und der Antwort beschreiben. Alles funktionierte gut, bis einer der Kunden begann, CDATA-Abschnitte in der Antwort-XML zu verwenden. Wir haben unseren Parser so eingerichtet, dass CDATA-Abschnitte nicht beachtet werden, sodass wir sie nicht interpretieren konnten.Beginnen Sie, CDATA eine brechende Änderung zu verwenden?

Meine Frage ist: Wer hat hier einen Fehler gemacht? Ich habe versucht, eine Antwort in den XML-Standards zu finden, bin mir aber immer noch nicht sicher. Ich denke, ich kann nicht vorschreiben, CDATA in einer XSD zu verwenden oder nicht, ist das richtig? Wenn ja, genügt es nicht, eine XSD zu vereinbaren, aber muss eine separate Vereinbarung über CDATA-Abschnitte getroffen werden? Oder muss man bereit sein, CDATA und normalen Text zu analysieren?

Ich interessiere mich für Ihre persönlichen Ansichten und alle offiziellen Aussagen. Vielen Dank!

Antwort

6

Viele XML-Parser trennen Text und CDATA, was bedauerlich ist. Der Fehler lag bei Ihnen: Es gibt keinen semantischen Unterschied zwischen regulären Textabschnitten und CDATA. Daher sollte der Absender frei zwischen den einzelnen Textabschnitten und den Anforderungen des vorliegenden Textes wählen können.

Die gute Nachricht ist, dass es eine einfache Angelegenheit sein sollte, Ihren Code anzupassen.

+0

Die unglückliche XML-Parser-Schnittstelle macht es teilweise die Schuld der Parser-Autoren. – Thilo

+0

Die einzigen zwei Auswahlmöglichkeiten für Fehler waren Sender und Empfänger. Parser-Anbieter ist nicht erlaubt! –

+0

Es ist die OP die Schuld, aber Thilo macht einen guten Punkt. Wenn es keinen semantischen Unterschied zwischen CDATA und PCDATA gibt, müssen Parser Ihnen nicht sagen, welches ein Textelement ist. Aber manche tun es trotzdem. – dan04

6

CDATA ist ein grundlegender Bestandteil von XML. Wenn sie nicht unterstützt werden, ist der Parser defekt (und kein echter XML-Parser (der in der Lage wäre, Elemente zu verarbeiten, die Text, CDATA, Entitäten, andere Elemente, Kommentare, usw. usw. enthalten).

Da ich es in einem Kommentar zu einer anderen Antwort erwähnt habe, habe ich jetzt einen Drang, es hier zu wiederholen. CDATA in XML nicht zu erwarten ist wie not expecting fish in the sea.

+0

Der Parser könnte die CDATA gut verarbeitet haben, bot nur eine andere Möglichkeit, um regelmäßige Inhalte und CDATA-Inhalte zu erhalten. Wir haben nur nach dem regulären gefragt. – kicsit

+3

Beim Parsen eines Dokuments (und normalerweise beim Generieren eines) sollten Sie sich nicht darum kümmern, * wie * die Struktur ausgedrückt wird. Es sollte vom Parser unsichtbar gehandhabt werden. Machen Benutzer des Parsers Dinge wie '$ foo = $ bar-> has_cdata? decode_cdata ($ bar-> cdata_content): $ bar-> non_cdata_content; 'ist einfach dumm. Es wird auch unbrauchbar, da Sie den CDATA-Modus nach Belieben ein- und ausschalten können (ein Teil des Elementinhalts befindet sich also in einem CDATA-Block und ein Teil davon nicht). – Quentin

+0

LOL - Punkt genommen! :) – kicsit

Verwandte Themen