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/>  

 

转载于:https://www.cnblogs.com/ace-wuqing/p/5563764.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C是一种编程语言,由Dennis Ritchie在20世纪70年代开发的。C是一种通用的,高级的编程语言,它在软件开发领域中非常常见。C具有高效率和灵活性的特点,被广泛应用于操作系统,嵌入式系统,游戏开发和其他各个领域。 C语言具有简洁,易于学习的特点,它的语法清晰,结构简单。C语言提供了丰富的库函数供开发人员使用,这些库函数可以用于处理文件,字符串,数学计算等各种任务。 由于C语言的高效性,它被广泛应用于操作系统的开发。大量的操作系统,如UNIX,Linux和Windows,都是使用C语言开发的。C语言的高效性使得它成为开发这些复杂系统的理想选择。 此外,C语言还被广泛用于嵌入式系统开发。嵌入式系统是指嵌入在其他设备或系统中的计算机系统,如手机,汽车控制系统,家电等。C语言的低级特性使得它能够直接访问硬件资源,满足嵌入式系统对性能和效率的要求。 对于游戏开发来说,C语言也是首选的编程语言之一。游戏通常需要高效的算法和数据处理,C语言的高效性可以满足这些需求。此外,C语言的底层特性使得开发人员可以更好地控制游戏的性能和资源。 总之,C语言是一种功能强大且广泛应用的编程语言。它的高效性和灵活性使得它成为软件开发领域的重要语言之一,无论是开发操作系统,嵌入式系统还是游戏,C语言都发挥着重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值