儲存與寫入文件
更新: November 2007
載入及儲存 XmlDocument 時,儲存的文件與原始文件在下列方面可能不同:
如果在呼叫 Save 方法之前將 PreserveWhitespace 屬性設為 true,則在輸出中會保留文件中的泛空白字元;如果此屬性為 false,則 XmlDocument 會自動縮排輸出。
屬性之間的所有泛空白字元會縮減為單一空格字元。
變更項目之間的泛空白字元。保留顯著的泛空白字元,但不保留不顯著的泛空白字元。不過,在儲存文件時,依預設會使用 XmlTextWriter Indenting 模式將輸出整齊列印出來,使其易於讀取。
依預設,會將屬性值周圍的引號字元變更為雙引號。您可以使用 XmlTextWriter 上的 QuoteChar 屬性,將引號字元設為雙引號或單引號。
依預設,會展開 { 之類的數字字元實體。
不保留在輸入文件中發現的位元組順序標記。除非您明確建立指定不同編碼的 XML 宣告,否則會將 UCS-2 儲存為 UTF-8。
如果您要將 XmlDocument 寫入檔案或資料流,則寫出的輸出與文件的內容相同。換言之,唯有當文件中已包含一個 XmlDeclaration 時,才會將其寫出,而且寫出文件時所使用的編碼與宣告節點中指定的編碼相同。
寫入 XmlDeclaration
除了 Save 及 WriteContentTo 的 XmlDocument 方法之外,OuterXml、InnerXml 及 WriteTo 的XmlDocument 及 XmlDeclaration 成員也會建立 XML 宣告。
對於 OuterXml、InnerXml 與 Save、WriteTo 及 WriteContentTo 方法的 XmlDocument 屬性,XML 宣告中寫出的編碼取自 XmlDeclaration 節點。如果不存在 XmlDeclaration 節點,則不會寫出 XmlDeclaration。如果 XmlDeclaration 節點中沒有編碼,則不會在 XML 宣告中寫出編碼。
XmlDocument.Save 及 XmlDocument.Save 方法始終會寫出 XmlDeclaration。這些方法從其正寫入的寫入器取得編碼。換言之,寫入器上的編碼值會覆寫文件上及 XmlDeclaration 中的編碼。例如,下列程式碼不會將編碼寫入輸出檔案 out.xml 中發現的 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 方法,會使用 XmlWriter 類別中的 WriteStartDocument 方法寫出 XML 宣告。因此,覆寫 WriteStartDocument 方法會變更文件開頭的寫入方式。
針對 OuterXml、WriteTo 及 InnerXml 的 XmlDeclaration 成員,如果未設定 Encoding 屬性,則不會寫出編碼。否則,在 XML 宣告中寫出的編碼與在 Encoding 屬性中發現的編碼相同。
使用 OuterXml 屬性寫入文件內容
OuterXml 屬性是全球資訊網協會 (W3C) XML 文件物件模型 (DOM) 標準的 Microsoft 擴充程式。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 屬性。