Поделиться через


Сохранение и запись документа

При загрузке и сохранении XmlDocument между сохраненным и исходным документами возможны следующие различия:

  • Если свойство PreserveWhitespace имеет значение true перед вызовом метода Save, то пробелы в документе при выводе сохраняются. Если свойство имеет значение false, то XmlDocument автоматически вставляет отступы в выходные данные.

  • Все пробелы между атрибутами сокращаются до одного символа пробела.

  • Пробелы между элементами изменяются. Значащие пробелы сохраняются, а незначащие - нет. Но при сохранении документа по умолчанию используется режим XmlTextWriterОтступ, обеспечивающий аккуратный внешний вид при печати и удобство чтения.

  • Символ кавычки вокруг значений атрибута по умолчанию заменяется символом двойной кавычки. Выбрать в качестве символа кавычки двойную кавычку или одинарную кавычку можно с помощью свойства QuoteChar класса XmlTextWriter.

  • По умолчанию символы числовых сущностей, например {, развертываются.

  • Значение отметки порядка байт во входном документе не сохраняется. UCS-2 сохраняется как UTF-8, если явно не создана XML-декларация, указывающая другую кодировку.

  • Если требуется записать XmlDocument в файл или поток, то записываемые выходные данные не будут отличаться от содержимого документа. То есть, XmlDeclaration записывается только если объявление содержится в документе, а кодировка, используемая при записи документа, совпадает с указанной в узле декларации.

Запись XmlDeclaration

XML-декларацию создают члены XmlDocument и элементы XmlDeclaration классов OuterXml, InnerXml, метод WriteTo, а также методы XmlDocument и Save класса WriteContentTo.

Для свойств XmlDocument методов OuterXml, InnerXml, а также методов Save, WriteTo и WriteContentTo кодировка, записываемая в XML-декларацию, берется из узла XmlDeclaration. Если узла нет XmlDeclaration , XmlDeclaration не записывается. Если в XmlDeclaration узле отсутствует кодировка, кодировка не записывается в объявлении XML.

Методы XmlDocument.Save и XmlDocument.Save всегда записывают XmlDeclaration. Они получают кодировку из модуля, в который производится запись. То есть, кодовое значение модуля записи переопределяет кодировку в документе и в XmlDeclaration. Например, приведенный ниже код не записывает кодировку в XML-декларацию, находящуюся в выходном файле out.xml.

Dim doc As New XmlDocument()  
Dim tw As XmlTextWriter = New XmlTextWriter("out.xml", Nothing)  
doc.Load("text.xml")  
doc.Save(tw)  
XmlDocument doc = new XmlDocument();  
XmlTextWriter tw = new XmlTextWriter("out.xml", null);  
doc.Load("text.xml");  
doc.Save(tw);  

Для метода Save XML-декларация записывается с помощью метода WriteStartDocument класса XmlWriter. Поэтому при перезаписи метода WriteStartDocument изменяется способ записи начала документа.

XmlDeclaration Для членов OuterXml, WriteToа InnerXmlесли Encoding свойство не задано, кодировка не записывается. В противном случае кодировка, записанная в объявлении XML, совпадает с кодировкой, найденной в свойствеEncoding.

Запись содержимого документа с помощью свойства OuterXml

Свойство OuterXml является расширением Майкрософт для стандартов объектной модели DOM XML-документа консорциума W3C. Свойство OuterXml позволяет получить разметку как полного XML-документа, так и единичного узла вместе с его дочерними узлами. Свойство OuterXml возвращает разметку, предоставляющую заданный узел и все его дочерние узлы.

В приведенном ниже образце кода показано сохранение документа целиком в виде строки.

Dim mydoc As New XmlDocument()  
' Perform application needs here, like mydoc.Load("myfile");  
' Now save the entire document to a string variable called "xml".  
Dim xml As String = mydoc.OuterXml  
XmlDocument mydoc = new XmlDocument();  
// Perform application needs here, like mydoc.Load("myfile");  
// Now save the entire document to a string variable called "xml".  
string xml = mydoc.OuterXml;  

В следующем образце кода показано, как сохранить только отдельный элемент документа.

' For the content of the Document Element only.  
Dim xml As String = mydoc.DocumentElement.OuterXml  
// For the content of the Document Element only.  
string xml = mydoc.DocumentElement.OuterXml;  

Однако если требуется содержимое дочерних узлов, можно использовать свойство InnerText.

См. также