有这么个需求:

要统计所有的配置文件,这些配置文件都xml格式,并把这些配置写到数据表里,如果有注释要把这些注释写到对应配置对象的描述字段上

 <item id="" key="-1" firstname="" secondname="" cssname="hy" decription="">
</item>
<!---->
<item id="" key="-1" firstname="" secondname="" cssname="" decription=“">
</item>

如上面所示,111 注释要写到下面的行记录对象上去

最终对象是: obj={id="",firstname="",secondname="",descrition="111"}

这个功能简单的不能再简单了,上线的产品非常多,各种配置文件也特别多,有的有注释,有的没有注释,怎么才能保证这些注释是加到对应的配置记录上去呢?

关键点在于怎么来判断注释和配置对象的关系:

读取到xml文件的根节点有两种类型:注释和元素节点,逻辑是:每次读取节点的时候先判断本次节点类型,如果是类型是注释,刚清除上一次的节点类型,保存本次节点类型,如果是

元素节点类型,刚判断上一次的节点类型是不是 注释类型 如果是 刚加到 描述字段,然后再清空上一次节点类型,记录这一次的节点类型,

流程如下:

代码:

flaglist中只存前一次节点元素类型,0表示 注释类型,1 表示元素类型:
 var attributes = "";
var key = "";
var tttt = (from config in XDoc.Descendants("configuration").Descendants("appSettings")
select config);
foreach (var node in tttt.Nodes())
{
if (node.NodeType == System.Xml.XmlNodeType.Comment)
{
flaglist.Clear();
attributes = node.ToString().Replace("<!--", "").Replace("-->", "");
flaglist.Add();
}
if (node.NodeType == System.Xml.XmlNodeType.Element)
{
if (flaglist.Count == )
{
if (flaglist[] == )
{
attributes = "";
}
}
flaglist.Clear();
key = ((XElement)node).Attribute("key").Value;
dic.Add(key, attributes);
flaglist.Add();
}
}

出处:http://www.cnblogs.com/langhua/p/4211669.html

=======================================================================

过滤xml中的注释:

上面的代码 if (node.NodeType == System.Xml.XmlNodeType.Comment) 判断节点是注释,还可以使用它里面自带了的解决办法,使用下面的代码进行过滤:
那就是在读取的时候,告诉编译器让它忽略掉里面的注释信息.修改如下:
XmlDocument xmlDoc = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;//忽略文档里面的注释
XmlReader reader = XmlReader.Create(@"..\..\Book.xml", settings);
xmlDoc.Load(reader);
最后读取完毕后,记得要关掉reader.
reader.Close(); 这样它就不会出现错误.

参考出处:http://www.cnblogs.com/enjoyprogram/p/3190789.html

最新文章

  1. 【转】探索C#之布隆过滤器(Bloom filter)
  2. iOS10 app连接不上网络的问题
  3. SharePoint List来做项目管理
  4. POJ 3461 Oulipo
  5. JQuery思维导图
  6. 使用crontab不能正常执行的问题
  7. SQL Server2005安装配置以及测试
  8. jquery hide() show()
  9. 你真的了解如何将 Nginx 配置为Web服务器吗
  10. vue入门 vue与react和Angular的关系和区别
  11. Hibernate 实体映射类的状态值自动转换
  12. css的浮动与定位
  13. AppStore IPv6-only审核被拒原因分析及解决方案-a
  14. docker 安装 zookeeper
  15. Delphi编程之爬取贴吧图片最终版
  16. ajax简单登录(踩过的坑)
  17. Codeforces 982E Billiard exgcd
  18. PAT基础6-3
  19. [bzoj4709][柠檬]
  20. AngularJs 开发遇到的问题,以及解决方案

热门文章

  1. UI控件之UIImageView
  2. Python自然语言处理 - 系列三
  3. 1000M链路的理论值计算
  4. linux下安装eclipse并使用xstart远程使用(centos7)
  5. 关于C++ 中的this 的理解
  6. DB2日期及时间的使用
  7. Codeforces Round #386 (Div. 2) C D E G
  8. python3与anaconda2共存
  9. localstorage存储对象
  10. PHP版微信第三方实现一键登录及获取用户信息的方法