2011-01-18 3 views
11

Можно создать дубликат:
How to remove whitespace from an XmlDocumentЕсть ли способ сохранить XmlDocument * без * отступов и строк?

Все мои поиски воспитали люди спрашивают обратное, но у меня есть файл, который растет почти на 50%, если он будет сохранен с возвратами строки и отступы.

Есть ли способ обойти это?

EDIT Я не говорю о открытии файла, но экономии один. Этот код воспроизводит «ошибка» для меня:

var path = @"C:\test.xml"; 
System.IO.File.WriteAllText(path, "<root>\r\n\t<line></line>\r\n\t<line></line>\r\n</root>"); 
System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); 
doc.PreserveWhitespace = false; 
doc.Load(path); 
doc.PreserveWhitespace = false; //just in case! 
doc.Save(path); 

точек останова в середине показывает, что doc.InnerXml эффективно <root><line></line><line></line></root>, как и ожидалось. Но содержание test.xml в конце концов:

<root> 
    <line> 
    </line> 
    <line> 
    </line> 
</root> 
+0

Возможные псевдо-дубликат http://stackoverflow.com/ вопросы/2035252/how-to-save-xmldocument-with-multiple-indentation-settings –

+1

(не полностью dup/read vs write - * related * хотя) –

ответ

22

Попробуйте этот код:

XmlDocument doc = new XmlDocument(); 

using(XmlTextWriter wr = new XmlTextWriter(fileName, Encoding.UTF8)) 
{ 
    wr.Formatting = Formatting.None; // here's the trick ! 
    doc.Save(wr); 
} 
+0

Спасибо, что прибил его! – Benjol

+0

Woo, и он сохраняет новые строки в '' blocks !, thanks – Deanna

+0

Спасибо! В настоящее время я извлекаю и импортирую обратно данные в файлы Trados 2014 (* .sdlxliff), и они ломаются, если я сохраняю их без удаления форматирования xml. – Cowwando

4

Использование XmlWriterSettings:

XmlDocument xmlDoc = new XmlDocument(); 
[...] 
XmlWriterSettings xwsSettings = new XmlWriterSettings(); 
xwsSettings.Indent = false; 
xwsSettings.NewLineChars = String.Empty; 
using (XmlWriter xwWriter = XmlWriter.Create(@"c:\test.xml", xwsSettings)) 
xmlDoc.Save(xwWriter); 
+0

Обратите внимание, что это также удаляет новые строки изнутри '' блоков (но не дополнительных пробелов). – Deanna

Смежные вопросы