2011-01-18 14 views
11

thể trùng lặp:
How to remove whitespace from an XmlDocumentCó cách nào để lưu XmlDocument * mà không có * thụt đầu dòng và trả về dòng không?

Mọi trường hợp khám của tôi đã lớn lên người hỏi ngược lại, nhưng tôi có một tập tin mà phát triển bởi gần 50% nếu nó được lưu với lợi nhuận dòng và thụt đầu dòng.

Có cách nào vòng này không?

EDIT Tôi không nói về mở một tập tin, nhưng tiết kiệm một. Mã này tái tạo các 'lỗi' cho tôi:

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); 

A breakpoint ở giữa cho thấy doc.InnerXml là một cách hiệu quả <root><line></line><line></line></root>, như mong đợi. Nhưng nội dung của test.xml ở cuối là:

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

thể giả bản sao của http://stackoverflow.com/ question/2035252/how-to-save-xmldocument-với-nhiều-thụt đầu dòng-cài đặt –

+1

(không hoàn toàn dup/đọc vs viết - * liên quan * mặc dù) –

Trả lời

22

Hãy thử mã này:

XmlDocument doc = new XmlDocument(); 

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

Cảm ơn, mà đóng đinh nó! – Benjol

+0

Woo, và nó bảo tồn các dòng mới trong '' blocks !, thanks – Deanna

+0

Cảm ơn! Tôi hiện đang trích xuất và nhập lại dữ liệu trong các tệp Trados 2014 (* .sdlxliff) và chúng sẽ bị hỏng nếu tôi lưu chúng mà không xóa định dạng xml. – Cowwando

4

Sử dụng 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

Lưu ý rằng thao tác này cũng sẽ xóa các dòng mới từ bên trong '' các khối (nhưng không phải là khoảng trắng thừa). – Deanna