Compartilhar via


Salvando e escrevendo um documento

Quando você carrega e salvar XmlDocument, o documento salvo pode diferir do original das seguintes maneiras:

  • Se a propriedade PreserveWhitespace for definida como true antes que o método Save seja chamado, o espaço em branco no documento será preservado na saída; se essa propriedade for false, o XmlDocument recua automaticamente a saída.

  • Todos os espaços em branco entre atributos são reduzidos a um único caractere de espaço.

  • O espaço em branco entre elementos é alterado. O espaço em branco significativo é preservado e o espaço em branco insignificante não é. Mas quando o documento é salvo, ele usará o modo XmlTextWriterRecuo por padrão para imprimir ordenadamente a saída e torná-la mais legível.

  • O caractere de aspas usado ao redor de valores de atributo é alterado para aspas duplas por padrão. Você pode usar a propriedade QuoteChar em XmlTextWriter para definir o caractere de aspas para aspas duplas ou aspas simples.

  • Por padrão, as entidades de caracteres numéricos como { são expandidas.

  • A marca de ordem de byte encontrada no documento de entrada não é preservada. O UCS-2 é salvo como UTF-8 a menos que você crie explicitamente uma declaração XML que especifica uma codificação diferente.

  • Se você quiser escrever o XmlDocument em um arquivo ou um fluxo, a saída escreve o mesmo que o conteúdo do documento. Isto é, o XmlDeclaration é escrito somente se houver um contido no documento e a codificação usada ao escrever o documento é a mesma fornecida no nó de declaração.

Escrevendo um XmlDeclaration

Os membros XmlDocument e XmlDeclaration de OuterXml, InnerXml e WriteTo, além dos métodos XmlDocument de Save e de WriteContentTo, criam uma declaração XML.

Para as propriedades XmlDocument de OuterXml, InnerXml e Save, WriteTo, e os métodos WriteContentTo, a codificação escrita na declaração XML é obtida do nó XmlDeclaration. Se não houver nó XmlDeclaration, XmlDeclaration não será gravado. Se não houver codificação no nó XmlDeclaration, a codificação não será gravada na declaração XML.

Os métodos XmlDocument.Save e XmlDocument.Save sempre escrevem XmlDeclaration. Esses métodos utilizam a codificação do escritor para o qual eles estão escrevendo. Isto é, o valor de codificação no escritor substitui a codificação no documento e no XmlDeclaration. Por exemplo, o código a seguir não escreve uma codificação na declaração XML encontrada no arquivo de saída 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);  

Para o método Save, a declaração XML é escrita usando o método WriteStartDocument na classe XmlWriter. Portanto, substituir o método WriteStartDocument altera o modo como o início do documento é escrito.

Para os membros XmlDeclaration de OuterXml, WriteTo e InnerXml, se a propriedade Encoding não estiver definida, nenhuma codificação será gravada. Caso contrário, a codificação gravada na declaração XML será a mesma que a codificação encontrada na propriedade Encoding.

Escrevendo o conteúdo do documento usando a propriedade OuterXml

A propriedade OuterXml é uma extensão da Microsoft para os padrões DOM (Document Object Model) de XML do W3C (World Wide Web Consortium). A propriedade OuterXml é usada para obter a marcação do documento XML inteiro ou apenas a marcação de um único nó e seus nós filho. OuterXml retorna a marcação que representa o nó determinado e todos os seus nós filho.

O exemplo de código a seguir mostra como salvar um documento em sua totalidade como uma cadeia de caracteres.

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;  

O exemplo de código a seguir mostra como salvar apenas o elemento do documento.

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

Ao contrário, você pode usar a propriedade InnerText se quiser o conteúdo dos nós filho.

Confira também