nippon-tussi
Goto Top

Dateiformat von XML-Dateien ermitteln

Der Titel klingt wie ein Widerspruch in sich und doch gibt es Unterschiede face-smile

Ich mache gerade meine ersten Gehversuche mit System.xml und finde Unterschiede in den Formaten der XML-Dateien die ich lesen möchte:

Ein Teil sind ACSI-Dateien, ein anderer UTF-16 und den meisten fehlt die Formatangabe am Dateianfang (z.B. <?xml version="1.0" encoding="UTF-8"?>)

Ich kann zwar mit
fileReader == My.Computer.FileSystem.ReadAllText(path, System.Text.Encoding.Unicode)

bzw
fileReader == My.Computer.FileSystem.ReadAllText(path, System.Text.Encoding.ASCII)

und anschließendem
LoadXml(fileReader)

die XML-Dateien lesen, aber wie stelle ich vorher ihr Format fest, wenn die Formatangabe in den Dateien fehlt?

Die einzige Möglichkeit die ich bis jetzt sehe ist, die Formate der Reihe nach zu lesen versuchen und dann das Ergebnis zu prüfen.

Ein einfaches
xmlDocument.LoadXml(path)
führt z.B. bei UTF-16 Dateien ohne Header zum Fehler 'Ungültige Daten auf Stammebene. Zeile 1, Position 1.'

Danke fürs Lesen, Tussi

Content-ID: 174242

Url: https://administrator.de/contentid/174242

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

dog
dog 06.10.2011 um 16:32:10 Uhr
Goto Top
nippon-tussi
nippon-tussi 07.10.2011 um 23:03:30 Uhr
Goto Top
Genau das war mein erster Versuch, aber wenn ich damit eine Unicode-Datei ohne Header laden will bekomme ich eine XMLException:'Ein Name darf nicht mit dem Zeichen '.', hexadezimaler Wert 0x00, beginnen. Zeile 1, Position 2.'. Offenbar interpretiert Load eine Datei ohne Header als ASCII. Sobald ich in so einer Datei den Header <?xml version="1.0" encoding="UTF-16"?> voranstelle akzeptiert Load diese.
dog
dog 07.10.2011 um 23:50:34 Uhr
Goto Top
Eine XML-Datei ohne <?xml-Tag ist auch keine gültige XML-Datei!.

In dem Fall musst du eben selbst ran und das Encoding erkennen (entweder am UTF-BOM oder am (nicht-)vorhandensein bestimmter Zeichen).
nippon-tussi
nippon-tussi 11.10.2011 um 01:17:32 Uhr
Goto Top
Genau das mache ich im Moment, indem ich versuche eine Datei mit unbekanntem Format als Unicode zu lesen und im Falle einer Exception die selbe Datei nochmal als ACSII lade. Ich hatte auf eine inteligentere Methode gehofft, zumal gerade in ASCII immernoch unterschiedliche Codepages auftauchen könnten...