2016-05-10 11 views
0

Während das bestehende XML zu neuem Standort speichern, entkam Einheiten aus dem Inhalt und ersetzt mit FragezeichenSpeicher von XML-Datei von einem Ort an einem anderen Ort mit XML-Dokument

die Snaps Siehe unten Einheit & # X2010; (- als Hex) beim Lesen vorhanden, aber nach dem Speichern an einem anderen Ort durch Fragezeichen ersetzt.

beim Lesen als Inner XML

While Reading as inner XML

beim Lesen als Inneren Text

While Reading as inner Text

Nach Datei XML Speichern

After Saving XML

EDIT 1 Unten finden Sie meinen Code

string path = @"C:\work\myxml.XML"; 
string pathnew = @"C:\work\myxml_new.XML"; 
//GetFileEncoding(path); 
XmlDocument document = new XmlDocument(); 
XmlDeclaration xmlDeclaration = document.CreateXmlDeclaration("1.0","US-ASCII",null); 
//document.CreateXmlDeclaration("1.0", null, null); 
document.Load(path); 
string x = document.InnerText; 
document.Save(pathnew); 

EDIT 2 Meine Quelldatei wie unten aussieht. Ich brauche die Entitäten zu halten, wie es

enter image description here

+2

Es ist fast sicher ein Codierungsproblem, aber niemand kann Ihnen helfen, ohne einen * Code * anstelle von Bildern zur Verfügung zu stellen. Wie schreibst du das XML? –

+0

@CharlesMager, Danke für Ihren Versuch. Siehe die bearbeitete Frage –

+0

Ist Ihre Quelldatei * tatsächlich * US-ASCII? Oder sagt die Erklärung einfach, es ist? Ich glaube nicht, dass dein Charakter [existiert in ASCII] (https://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart), weshalb er ersetzt wird. 'XmlDocument' leitet die Codierung ab, die beim Speichern von der Deklaration verwendet werden soll. –

Antwort

3

ist hier die Frage scheint durch die spezifische XmlWriter Umsetzung der Umgang mit Codierung von Entity-Referenzen zu internen XmlDocument.

Das Problem verschwindet, wenn Sie eine XmlWriter selbst erstellen - die nicht unterstützten Zeichen wird korrekt als Entity-Referenz kodiert. Diese XmlWriter ist eine andere (und neuere) Implementierung, die eine EncoderFallback setzt, die Zeichen als Entitätsreferenzen für Zeichen codiert, die nicht codiert werden können. Laut den Bemerkungen in den Dokumenten besteht der Standard-Fallback-Mechanismus darin, ein Fragezeichen zu codieren.

var settings = new XmlWriterSettings 
{ 
    Indent = true, 
    Encoding = Encoding.GetEncoding("US-ASCII") 
}; 

using (var writer = XmlWriter.Create(pathnew, settings)) 
{ 
    document.Save(writer);    
} 

Als beiseite, ich würde recomment die Verwendung von LINQ to XML XDocument API, es ist viel schöner, mit zu arbeiten als die alten knarrenden XmlDocument API. Und seine Version von Save hat dieses Problem auch nicht!

+0

Danke für deinen Code. Ich weiß nicht, warum & # x00F6; konvertiert als ö. Es sollte als & # x00F6; –

+0

Da wir uns dem erwarteten Output nähern. Ich schätze deine Arbeit wirklich. –

+1

@Karthick Ich glaube nicht, dass du eine Kontrolle über die Encodierung der Entität bekommst. Semantisch sind sie genau gleich. –

Verwandte Themen