Alles über XML & Co. (XML Schema, XSLT, XPath, XQuery)

Dienstag, Februar 22, 2005

XML 1.1 und ungültige Zeichen

Auf der BASTA letzte Woche hatte ich in meinem Vortrag Tool Time: XML in der Praxis noch erklärt, dass XML 1.1 kein Thema sei, da es nur marginale Änderungen bzw. Verbesserungen mit sich bringen würde – hauptsächlich im Hinblick auf die Konformität zum Unicode-Standard. Gestern wurde ich eines besseren belehrt: Als ich den Inhalt einer Email von Outlook per Web Service an eine Java-Applikation versandte, erhielt ich vom SAX-Parser die Meldung, dass Zeichen mit der Entität (Code 11) nicht erlaubt seien. Nach kurzer Recherche fand ich heraus, dass dieses Zeichen den Vertical Tab (vbVerticalTab) repräsentierte und eigentlich unter Windows nicht verwendet wird. Anscheinend doch! Und zwar dann, wenn man in Outlook Word als Email-Editor verwendet und auf eine Email antwortet?!

XML 1.1 erlaubt nun dieses und andere Zeichen, indem es sie als RestrictedChar betrachtet. „Restricted“ deshalb, weil sie nur als Entität in ein XML-Dokument aufgenommen werden dürfen. Da weder .NET 1.0 noch .NET 2.0 XML 1.1 unterstützen, bleibt diese Erkenntnis jedoch nutzlos. Weiterhin ist fraglich, warum der Fehler nicht bereits auf der Client-Seite auftritt, sprich die Web Service-Stubs nicht schon vor dem ungültigen Zeichen warnen. Wie dem auch sei, eine einfache Lösung dieses Problems besteht darin, die unerlaubten Zeichen durch Leerzeichen zu ersetzen:

Public Sub CleanText(ByRef Text As String)
Dim Chars() As Char = Text.ToCharArray
For i As Integer = 0 To Chars.Length - 1
Select Case Asc(Chars(i))
Case &H9 , &HA , &HD , &H20 To &HD7FF , &HE000 To &HFFFD , &H10000 To &H10FFFF
Case Else Chars(i) = " "c
End Select
Next
Text = New String(Chars)
End Sub

0 Comments:

Kommentar veröffentlichen

Links to this post:

Link erstellen

<< Home