使用DataSet可以直接输出XML,并可指定是否带有Schema:
ds.WriteXml(XMLFile,XmlWriteMode.WriteSchema )
不过,这样将不会输出值为Null的字段,如:
你可能希望结果是这样:
<a>1</a>
<b>2</b>
<c></c>
但结果为:
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();
}
输出:
|