2010-01-09 11 views
5

Tôi cần lưu một XmlDocument để nộp với thụt lề thích hợp (Formatting.Indented) nhưng một số nút có con phải nằm trong một dòng (Formatting.None).Làm thế nào để lưu XmlDocument với nhiều thiết lập thụt đầu dòng?

Làm cách nào để đạt được điều đó kể từ khi XmlTextWriter chấp nhận cài đặt cho toàn bộ tài liệu?


Chỉnh sửa sau resposne @Ahmad Mageed của:

Tôi không biết rằng các thiết lập XmlTextWriter thể được sửa đổi trong văn bản. Đó là tin tốt.

Ngay bây giờ tôi đang tiết kiệm XmlDocument (mà đã được lấp đầy với các nút, để được cụ thể nó là .xaml trang) theo cách này:

XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8); 
writer.Formatting = Formatting.Indented; 
xmlDocument.WriteTo(writer); 
writer.Flush(); 
writer.Close(); 

Nó cho phép thụt đầu dòng trong tất cả các nút, tất nhiên. Tôi cần vô hiệu hóa thụt lề khi xử lý tất cả các nút <Run>.

Trong ví dụ bạn viết cho XmlTextWriter "theo cách thủ công". Có cách nào dễ dàng thu thập dữ liệu qua tất cả các nút xmlDocument và ghi chúng vào XmlTextWriter để tôi có thể phát hiện các nút <Run> không? Hoặc tôi phải viết một số loại phương pháp đệ quy sẽ đi đến tất cả các con của nút hiện tại?

+0

@shg: Tôi thấy trả lời của bạn. LINQ to XML có phải là một tùy chọn không? Hoặc nghiêm chỉnh .NET 2.0? BTW bạn nên chỉnh sửa câu hỏi của bạn và đăng mã đó ở đây thay vì đăng nó như là một câu trả lời vì vậy tất cả mọi thứ là ở một chỗ cho những người khác để xem vì nó là thông tin bổ sung cho câu hỏi của bạn. Bạn có thể chỉnh sửa trang này rồi xóa bài đăng khác. –

+0

@Ahmad Mageed: Tôi chưa từng sử dụng LINQ to XML trước đây nhưng đây là một tùy chọn. Cảm ơn gợi ý. Tôi sẽ xem xét kỹ hơn. BTW Tôi đã thực hiện chỉnh sửa bạn đã đề xuất. Tôi mới đăng câu hỏi trên stackoverflow vì vậy xin lỗi vì sự lộn xộn. – shg

Trả lời

3

Ý của bạn là gì bởi "vì XmlTextWriter chấp nhận cài đặt cho toàn bộ tài liệu?" Các thiết lập của XmlTextWriter có thể được sửa đổi, không giống như XmlWriter của một lần thiết lập. Tương tự, bạn đang sử dụng XmlDocument như thế nào? Vui lòng đăng một số mã để hiển thị những gì bạn đã cố gắng để những người khác hiểu rõ hơn về vấn đề này.

Nếu tôi hiểu chính xác, bạn có thể sửa đổi định dạng của XmlTextWriter để ảnh hưởng đến các nút bạn muốn xuất hiện trên một dòng. Khi bạn đã hoàn tất, bạn sẽ đặt lại định dạng trở lại để thụt lề.

Ví dụ, một cái gì đó như thế này:

XmlTextWriter writer = new XmlTextWriter(...); 
writer.Formatting = Formatting.Indented; 
writer.Indentation = 1; 
writer.IndentChar = '\t'; 

writer.WriteStartElement("root"); 

// people is some collection for the sake of an example 
for (int index = 0; index < people.Count; index++) 
{ 
    writer.WriteStartElement("Person"); 

    // some node condition to turn off formatting 
    if (index == 1 || index == 3) 
    { 
     writer.Formatting = Formatting.None; 
    } 

    // write out the node and its elements etc. 
    writer.WriteAttributeString("...", people[index].SomeProperty); 
    writer.WriteElementString("FirstName", people[index].FirstName); 

    writer.WriteEndElement(); 

    // reset formatting to indented 
    writer.Formatting = Formatting.Indented; 
} 

writer.WriteEndElement(); 
writer.Flush();