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-Key: 174242

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

Printed on: April 25, 2024 at 23:04 o'clock

Member: dog
dog Oct 06, 2011 at 14:32:10 (UTC)
Goto Top
Member: nippon-tussi
nippon-tussi Oct 07, 2011 at 21:03:30 (UTC)
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.
Member: dog
dog Oct 07, 2011 at 21:50:34 (UTC)
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).
Member: nippon-tussi
nippon-tussi Oct 10, 2011 at 23:17:32 (UTC)
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...