Enregistrement et écriture d'un document
Lorsque vous chargez et enregistrez un objet XmlDocument, le document sauvegardé peut varier de l'original dans les points suivants :
Si la propriété PreserveWhitespace est définie sur
true
avant l'appel à la méthode Save, l'espace blanc du document est conservé à la sortie. Si cette propriété est définie surfalse
, l'objet XmlDocument met automatiquement la sortie en retrait.Tous les espaces blancs entre les attributs sont réduits à un espace simple.
L'espace blanc entre les éléments est modifié. Seuls les espaces blancs significatifs sont conservés. Mais lors de l'enregistrement du document, celui-ci utilise le mode XmlTextWriter Indenting par défaut pour imprimer clairement la sortie et la rendre plus lisible.
Le caractère guillemet qui entoure les valeurs d'attribut est remplacé par défaut par le guillemet double. Vous pouvez utiliser la propriété QuoteChar sur XmlTextWriter pour définir le caractère guillemet sur un guillemet double ou un guillemet simple.
Par défaut, des entités de caractère numérique telles que
{
sont développées.La marque d'ordre d'octet se trouvant dans le document d'entrée n'est pas conservée. L'encodage UCS-2 est enregistré comme de l'encodage UTF-8 à moins que vous ne créiez explicitement une déclaration XML qui spécifie un autre encodage.
Si vous souhaitez écrire l'objet XmlDocument dans un fichier ou un flux, la sortie écrite est identique au contenu du document. Ainsi, l'objet XmlDeclaration n'est écrit que s'il en existe un dans le document et l'encodage employé pour l'écriture du document est le même que celui du nœud de déclaration.
Écriture d'une XmlDeclaration
Les membres XmlDocument et XmlDeclaration de la propriété OuterXml, InnerXml, WriteTo et les méthodes XmlDocument de Save et WriteContentTo créent une déclaration XML.
Pour les propriétés XmlDocument de OuterXml, InnerXml, Save, WriteTo et les méthodes WriteContentTo, l'encodage écrit dans la déclaration XML est prélevé du nœud XmlDeclaration. S’il n’existe aucun nœud XmlDeclaration, XmlDeclaration n’est pas écrit. S’il n’existe aucun encodage dans le nœud XmlDeclaration, l’encodage n’est pas écrit dans la déclaration XML.
Les méthodes XmlDocument.Save et XmlDocument.Save écrivent toujours un objet XmlDeclaration. Ces méthodes prennent l'encodage du writer dans lequel elles écrivent. Ainsi, la valeur d'encodage du writer remplace l'encodage du document et de l'objet XmlDeclaration. Par exemple, le code suivant n'écrit pas un encodage dans la déclaration XML trouvée dans le fichier de sortie 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);
Dans le cas de la méthode Save, la déclaration XML est écrite à l'aide de la méthode WriteStartDocument de la classe XmlWriter. Par conséquent, le remplacement de la méthode WriteStartDocument modifie la manière dont le début du document est écrit.
Pour les membres XmlDeclaration de OuterXml, WriteTo et InnerXml, si la propriété Encoding n’est pas définie, aucun encodage n’est écrit. Sinon, l’encodage écrit dans la déclaration XML est le même que celui trouvé dans la propriété Encoding.
Écriture de contenu de document à l'aide de la propriété OuterXml
La propriété OuterXml est une extension Microsoft des normes DOM (Document Object Model) XML du W3C (World Wide Web Consortium). La propriété OuterXml permet d'obtenir le balisage de l'ensemble du document XML ou d'un seul nœud et de ses nœuds enfants. La propriété OuterXml retourne le balisage représentant le nœud donné et tous ses nœuds enfants.
L'exemple de code suivant montre comment enregistrer l'intégralité d'un document sous la forme d'une chaîne.
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;
L'exemple de code suivant montre comment n'enregistrer que l'élément de document.
' 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;
En revanche, vous pouvez utiliser la propriété InnerText pour obtenir le contenu des nœuds enfants.