2010-12-31 11 views
35

Ich versuche, das XML-Dokument mit XDocument-Methode zu lesen. aber ich bin immer einen Fehler, wenn xmlLaden von XML mit Codierung UTF 16 mit XDocument

<?xml version="1.0" encoding="utf-16"?> 

hat Wenn ich Codierung manually.It perfekt funktioniert entfernt.

ich Störung erhalte "Es gibt keine Unicode Bytereihenfolgemarkierung Kann nicht auf Unicode wechseln."

Ich habe versucht, die Suche und ich landete hier oben ->

Why does C# XmlDocument.LoadXml(string) fail when an XML header is included?

Aber konnte mein Problem nicht lösen.

Mein Code:

XDocument xdoc = XDocument.Load(path); 

Irgendwelche Vorschläge ??

danke.

Antwort

57

Es sieht so aus, als ob die Datei, die Sie lesen möchten, nicht als Unicode codiert ist. Sie können das Verhalten replizieren, indem Sie versuchen, eine als ANSI codierte Datei mit der Codierung in der als utf-16 angegebenen XML-Datei zu öffnen.

Wenn Sie nicht sicher, dass die Datei richtig codiert ist, dann können Sie die Datei in einen Strom lesen (lassen die StreamReader die Codierung erkennen) und erstellen Sie dann die XDocument:

using (StreamReader sr = new StreamReader(path, true)) 
{ 
    XDocument xdoc = XDocument.Load(sr); 
} 
+0

Ich habe meine Ausgabe von XML in HTML gespuckt werden. Die obige Lösung hat bei mir nicht funktioniert. Ich habe ein Copyright-Symbol (c) in meinem Text des XML-Dokuments und es wird immer verstümmelt, wenn der HTML-Code zum Browser kommt. Also habe ich versucht zu kodieren (XML kodiert die HTML-kodierte Zeichenkette), aber es kommt buchstäblich heraus, wie es in HTML ist. d.h. & Kopie; in xml kommt buchstäblich als & Kopie heraus; anstelle der erwarteten ©, so dass der Browser die (c) anzeigen kann. –

8

Ich habe versucht, und fand einen anderen Weg, es zu tun !!

XDocument xdoc = XDocument.Parse(System.IO.File.ReadAllLines(path)); 
+1

Wow! Das ist neu, 4.5 wurde gerade veröffentlicht! (2012-08-15 - Vor 5 Tagen) :) So bleibst du auf deinem Rahmen Sangram! –

+0

@ ArvoBowen- ich wirklich nicht bekommen, was Sie versuchen zu sagen .. –

+0

Von dem, was ich sagen kann, die XDocument.Parse() -Methode war neu und nur in .NET Framework 4.5 eingeführt. Das wurde am 15.08.2012 veröffentlicht, was damals 5 Tage her war ... Es war einfach eine Ergänzung, normalerweise sagen die Leute nur Danke für eine Ergänzung. : P –

4

Dieser Code:

System.IO.File.ReadAllLines(path) 

gibt ein Array von Strings. Der richtige Code ist:

System.IO.File.ReadAllText(path) 
+1

okay. das ist ein anderer Weg, es zu tun. aber readAllLines funktioniert. –

+0

Der beste Weg, es zu tun, keine Komplikationen. Vielen Dank. –