標籤:
使用DataSet可以直接輸出XML,並可指定是否帶有Schema:
ds.WriteXml(XMLFile,XmlWriteMode.WriteSchema )
不過,這樣將不會輸出值為Null的欄位,如:
你可能希望結果是這樣:
<a>1</a> <b>2</b> <c></c>
但結果為:
<a>1</a> <b>2</b>
c沒有輸出在XML檔案中,其實我覺得這樣更合理,否則,如何區分null和""呢?如果希望輸出c,那隻能通過XmlDocument自己寫了:
//初始化一個xml執行個體 XmlDocument XmlDoc = new XmlDocument(); XmlNode xmlnode = XmlDoc.CreateNode(XmlNodeType.XmlDeclaration, "", ""); XmlDoc.AppendChild(xmlnode); //建立xml的根節點 XmlElement rootElement = XmlDoc.CreateElement("Rows"); //將根節點加入到xml檔案中(AppendChild) XmlDoc.AppendChild(rootElement); foreach (DataRow dr in ds.Tables[0].Rows) { XmlElement xmlRow = XmlDoc.CreateElement("Row"); rootElement.AppendChild(xmlRow); foreach (DataColumn col in ds.Tables[0].Columns) { XmlElement xmlCol = XmlDoc.CreateElement(col.ColumnName); xmlCol.InnerText = dr[col].ToString(); xmlRow.AppendChild(xmlCol); } } XmlDoc.Save(file);
空節點顯示出來了,但是,另一個問題出現了,空節點換行了,成了這樣:
<a>1</a> <b>2</b> <c> </c>
雖然這樣也符合XML標準,使用C#也很容易可以讀取該XML,但是對於一些有審美潔癖的人和已經寫好的XML匯入程式來說,總希望能改進一下,將空元素放到一行裡邊去。有人說使用XmlTextWriter 的Formatting,即:
using (XmlTextWriter xtw = new XmlTextWriter(file, null)) { xtw.Formatting = Formatting.None; XmlDoc.Save(xtw); }
但是這樣一來,XML裡所有內容都不換行全連在一起了,可讀性更差。實際上值為NULL或者""時,不要給InnerText賦值就行了:
if (dr[col].ToString() != null && dr[col].ToString() != "") { xmlCol.InnerText = dr[col].ToString(); }
輸出:
<a>1</a> <b>2</b> <c/>
C# 產生XML空元素/空節點自動換行解決方案