C# 生成XML空元素/空节点自动换行解决方案

使用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-08-04 18:24:31

C# 生成XML空元素/空节点自动换行解决方案的相关文章

PHP中的生成XML文件的4种方法分享

生成如下XML串 Xml代码 <?xml version="1.0" encoding="utf-8"?> <article> <item> <title size="1">title1</title> <content>content1</content> <pubdate>2009-10-11</pubdate> </item&g

鲜为人知的空元素╮(╯▽╰)╭

常见的空元素 <br> <img> <input> <link> <meta> <hr> 鲜为人知的:<keygen> <col> <command> <area> <base> <embed> <param><source> <track><wbr> <keygen>是用于表单的秘钥对生成器的字段 &l

去掉数组中的空元素

function removeEmptyArrayEle(arr){ for(var i = 0; i < arr.length; i++) { if(arr[i] == undefined) { arr.splice(i,1); i = i - 1; // i - 1 ,因为空元素在数组下标 2 位置,删除空之后,后面的元素要向前补位, // 这样才能真正去掉空元素,觉得这句可以删掉的连续为空试试,然后思考其中逻辑 } } return arr; }; var arr = [0,1,,,2];

行内元素、块级元素、空元素各有哪些?

行内元素: a, b, span, img, input, strong, select, label, em, button, textarea 块级元素: div, ul, li, dl, dt, dd, p, h1-h6, blockquote 空元素: br, meta, hr, link, input, img

块级元素、行内元素和空元素(void)

块级元素:<address>.<caption>.<dd>.<div>.<dl>.<dt>.<fieldset>.<form>.<h1>.<h2>.<h3>.<h4>.<h5>.<h6>.<hr>.<legend>.<li>.<noframes>.<noscript>.<ol

匹配所有不包含子元素或者文本的空元素

描述: 查找所有不包含子元素或者文本的空元素 HTML 代码: <table> <tr><td>Value 1</td><td></td></tr> <tr><td>Value 2</td><td></td></tr> </table> jQuery 代码: $("td:empty") 结果: [ <td>&

[ jquery 选择器 :empty ] 此方法选取所有不包含子元素或者文本的空元素

此方法选取所有不包含子元素或者文本的空元素: 实例: <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title> <meta http-equiv='description' content='this is my page'> <meta http-equiv='keywords' content='keyword1,keyword2,k

Java、Linux、Win 快速生成指定大小的空文件

Linux dd 命令: dd if=/dev/zero of=<fileName> bs=<一次复制的大小> count=<复制的次数> 生成 50 MB 的空文件: dd if=/dev/zero of=50M-1.txt bs=1M count=50 Windows fsutil 命令: fsutil file createnew <fileName> <文件大小单位字节> 生成 10MB 的空文件: fsutil file createn

怎样理解数组的空元素empty与undefined的区别

数组的空元素empty表示空位, 它不是一种数据类型, 而是由于人为修改arr.length 或者写入时多写了逗号造成的. var arr = [1,2,3,4,,,5]; arr.length; // 7 arr.length = 10; arr; // [1, 2, 3, 4, empty × 2, 5, empty × 3] undefined是一种数据类型, 在数组中表示这个位置的值未定义, 但它仍然指向某个内存地址, 这个内存地址指向的是undefined; var arr = [1,