2009-11-18 13 views
12

BOM, oluşturulmakta olan bir XML dosyasından nasıl kaldırılır?C# XmlTextWriter kullanarak BOM'u nasıl kaldırabilirim?

Yeni UTF8Encoding (false) yöntemini kullanmayı denedim, ancak çalışmıyor.

XmlDocument xmlDoc = new XmlDocument(); 
XmlTextWriter xmlWriter = new XmlTextWriter(filename, new UTF8Encoding(false)); 
xmlWriter.Formatting = Formatting.Indented; 
xmlWriter.WriteProcessingInstruction("xml", "version='1.0' encoding='UTF-8'"); 
xmlWriter.WriteStartElement("items"); 
xmlWriter.Close(); 
xmlDoc.Load(filename); 
XmlNode root = xmlDoc.DocumentElement; 
XmlElement item = xmlDoc.CreateElement("item"); 
root.AppendChild(item); 
XmlElement itemCategory = xmlDoc.CreateElement("category"); 
XmlText itemCategoryText = xmlDoc.CreateTextNode("test"); 
item.AppendChild(itemCategory); 
itemCategory.AppendChild(itemCategoryText); 
xmlDoc.Save(filename); 
+0

Bilginize, 'yeni XmlTextReader()' veya 'yeni XmlTextWriter()' kullanmamalısınız: Tekrar kodlamayı belirtmek böylece

Sadece yerine TextWriter kaydedin. .NET 2.0'dan beri kullanımdan kaldırıldılar. Bunun yerine 'XmlReader.Create()' veya 'XmlWriter.Create()' kullanın. –

cevap

29

Dosyayı iki kez kaydediyorsunuz - bir kez XmlTextWriter ile ve bir kez xmlDoc.Save ile. XmlTextWriter'dan yapılan kayıt, değil, bir BOM ekleyerek, xmlDoc.Save ile kayıtlıdır.

using (TextWriter writer = new StreamWriter(filename, false, 
              new UTF8Encoding(false)) 
{ 
    xmlDoc.Save(writer); 
} 
+0

Merhaba Jon, hızlı cevap için teşekkürler, bu yüzden başında XmlTextWriter bölümünü kaldırmak ve sadece yöntem sonunda TextWriter kullanmak için söylüyorsun? – Chris

+0

Kodunuzun ne anlama geldiği açık değil. Şu anda neden dosyayı kaydediyor ve yeniden yüklüyorsunuz? –

+0

Sadece içinde bir dizi farklı düğüm bulunan bir XML dosyası oluşturmaya çalışıyorum. Dürüst olmak gerekirse acelem vardı ve başka bir siteden bölümü çekti ve uygun yerlerde değiştirdim. – Chris

0

Ben bir dize (oluşturucu) XML yazacağımı yerine ve daha sonra bu dize dosyaya yazma: İşte sahip koddur.

+0

Bu yaklaşım gerekenden daha yavaştır ve gereksiz bir orta adım eklerken XML veri kümeniz yeterince büyükse fazladan bellek harcar. Xml [Metin] Yazıcısını kullanarak en iyi şekilde dosyaya yazmak için en iyisi diğer cevaplar. – user169771

İlgili konular