使用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/>
时间: 2024-10-17 03:05:25