Fehlerhaftes XML "reparieren" oder trotzdem einlesen

16/09/2008 - 21:27 von Thomas Hübner | Report spam
Hi NG,

ich erhalte aus Dbox2 Aufnahmen XML Files für die ich gerne einen
"Tagger" bauen würde. Leider bringt bei manchen Files XMLDocument.Load
eine Ausnahme wg. ungültigem Zeichen a'la:

"'', hexidezimaler Wert 0x05, ist ein ungültiges Zeichen. Zeile 14,
Position 28."

Das Zeichen ist so ein typisches Rechteck welches bei fehlendem Zeichen
im Font angezeigt wird. Wie kann ich dieses File trotzdem einlesen bzw.
im Vorfeld reparieren? Ich weis auch nicht ob noch mehr ungültige
Hexwerte darin vorkommen - ausschließen würde ich das aber nicht.

Beispiel XML (das fehlerhafte Zeichen ist exakt in <audio pid="1024"
name="deutsch"/>: vor deutsch

<?xml version="1.0" encoding="UTF-8"?>

<neutrino commandversion="1">
<record command="record">
<channelname>N24</channelname>
<epgtitle>N24 Spezial: Klima-Alarm 2007</epgtitle>
<id>83039</id>
<info1>N24 Spezial: Klima-Alarm 2007</info1>
<info2>Ein chronologischer Überblick über die weltweit schwersten
Naturkatastrophen 2007, ausgelöst durch die globale Erwàrmung und andere
Auswirkungen des Klimawandels. Vor dem Hintergrund der brisanten
Schlussfolgerungen des jüngsten UN-Klimaberichtes verdeutlicht N24
Redakteurin Manuela Klein in ihrer Reportage &quot;Klima-Alarm
2007&quot;, wie ernst die Lage ist und welchen extremen Klima- und
Wettersituationen Natur und Mensch im Laufe des Jahres 2007 ausgesetzt
waren.</info2>
<epgid>2147483647</epgid>
<mode>1</mode>
<videopid>1023</videopid>
<audiopids selected="1024">
<audio pid="1024" name="deutsch"/>
</audiopids>
<vtxtpid>35</vtxtpid>
<genremajor>0</genremajor>
<genreminor>0</genreminor>
<seriename></seriename>
<length>33</length>
<reclength>1499</reclength>
<productioncountry></productioncountry>
<productiondate>0</productiondate>
<qualitiy>0</qualitiy>
<parentallockage>0</parentallockage>
<dateoflastplay>949273200</dateoflastplay>
<bookmark>
<bookmarkstart>0</bookmarkstart>
<bookmarkend>0</bookmarkend>
<bookmarklast>0</bookmarklast>
<bookmarkuser bookmarkuserpos="0" bookmarkusertype="0"
bookmarkusername=""/>
</bookmark>
</record>
</neutrino>

Gruß,
Thomas
 

Lesen sie die antworten

#1 Christoph Schneegans
16/09/2008 - 22:47 | Warnen spam
Thomas Hübner schrieb:

"'', hexidezimaler Wert 0x05, ist ein ungültiges Zeichen.



Ein solches Zeichen ist in einem XML-Dokument in der Tat unzulàssig,
vgl. <http://www.w3.org/TR/REC-xml/#NT-Char>. Insbesondere wird das
Zeichen auch mit

Dim xrs As New XmlReaderSettings
xrs.CheckCharacters = False

nicht akzeptiert. Du wirst das Zeichen also vorher ersetzen müssen,
ohne XML-Methoden zu verwenden. Im einfachsten Fall kannst du etwa

Dim filepath As String = "c:\foo.xml"
Dim s As String = File.ReadAllText(filepath)
s = s.Replace(ChrW(5), "")
File.WriteAllText(filepath, s)

verwenden.

<http://schneegans.de/sv/> · Schema-Validator für XML

Ähnliche fragen