題外話:
使用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/>