for xml path mit CDATA Direktive? und gegen DTD prüfen?

26/06/2009 - 15:27 von Antje Kaiser | Report spam
Hallo,
da ich nun schon den halben Tag rumsuche wende ich mich mit meinem Problem
wieder mal an Euch.
Aus meiner SQL Server 2005 Datenbank habe ich einen recht komplexen
XML-Output als Schnittstelle programmiert. Das ließ sich super machen via for
xml path und mehreren Skalarwertfunktionen die jeweils xml zurückliefern. Nun
kommt aber die Feststellung, daß in der Datenbank in diversen Textfeldern
auch mal Sonderzeichen wie & <> ... vorkommen. -> alles klar-kein Problem,
nehmen wir die CDATA-Direktive.aber denkste! Die gibt es nur im Explicit
Modus von for xml leider!
Gibt es keine Möglichkeit beim Aufbau des XML mit der Path Methode das CDATA
einzufügen? Es in den Text zu schmuggeln habe ich probiert, aber da ist ja
die erste spitze Klammer vor dem CDATA schon zum < geworden. Mmhh, auf den
Explicit-Modus umschwenken würde ich àußerst ungern, da das ziemlich komplex
werden würde.
Für Eure Tipps bin ich sehr dankbar.
Außerdem gleich noch eine zweite Frage: Zu meinem entstehenden XML habe ich
eine DTD. Wie kann ich den, in meiner xml-Variable entstandenen, Inhalt gegen
diese DTD prüfen?
Danke im Vorraus,

Gruß
Antje
 

Lesen sie die antworten

#1 Martin Honnen
27/06/2009 - 14:09 | Warnen spam
Antje Kaiser wrote:

Aus meiner SQL Server 2005 Datenbank habe ich einen recht komplexen
XML-Output als Schnittstelle programmiert. Das ließ sich super machen via for
xml path und mehreren Skalarwertfunktionen die jeweils xml zurückliefern. Nun
kommt aber die Feststellung, daß in der Datenbank in diversen Textfeldern
auch mal Sonderzeichen wie & <> ... vorkommen. -> alles klar-kein Problem,
nehmen wir die CDATA-Direktive.aber denkste! Die gibt es nur im Explicit
Modus von for xml leider!



Warum willst du einen CDATA-Abschnitt, um die Ausgabe leserlicher zu
halten, oder weil du diese als notwendig ansiehst? CDATA ist "syntatic
sugar", es ist auch möglich, die Zeichen zu maskieren, und das macht FOR
XML automatisch, also

SELECT 'a < b && b < c'
FOR XML PATH('row'), ROOT('root');

ergibt

<root>
<row>a &lt; b &amp;&amp; b &lt; c</row>
</root>

was auch ohne CDATA sauberes XML ist.

Gibt es keine Möglichkeit beim Aufbau des XML mit der Path Methode das CDATA
einzufügen?



Meines Wissens nicht.


Martin Honnen MVP XML
http://msmvps.com/blogs/martin_honnen/

Ähnliche fragen