有这么个需求:

要统计所有的配置文件,这些配置文件都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

C# 读xml注释或过滤xml注释的更多相关文章

  1. 关于iBatis配置xml文件时出现中文注释出错的一个问题(很坑爹.)

    才开始我没有使用SqlMap.properties来配置连接信息.所以直接用ctrl + shift + C然后往里面添加的中文注释 例: <!-- 注释--> 运行的时候报: Error ...

  2. mybites框架遇到的坑之Mapper.xml文件不要随意加注释和ORA-00911

    原文链接:https://blog.csdn.net/streetlight8023/article/details/69388495/ 先说解决方法: org.mybatis.spring.MyBa ...

  3. 用saxon框架对xml数据进行过滤 - 程序员的天堂 - ITeye技术网站

    用saxon框架对xml数据进行过滤 博客分类: Java   Saxon 是一个 XSLT 和XQuery处理器.它是使用 XML 文档和样式表作为输入,然后生成结果文档作为输出的程序,它还包括了一 ...

  4. SQL注入之Sqli-labs系列第二十五关(过滤 OR & AND)和第二十五A关(过滤逻辑运算符注释符)

    开始挑战第二十五关(Trick with OR & AND) 第二十五关A(Trick with comments) 0x1先查看源码 (1)这里的or和and采用了i正则匹配,大小写都无法绕 ...

  5. PHP过滤html注释

    过滤html注释: 所谓过滤,不过是字符串的匹配与替换,这里我们用到的正则匹配替换函数preg_replace(reg,replace,string);,PHPer都清楚,这个函数的关键在于reg的精 ...

  6. xml 标准字符过滤

    今天在代码里面看见一串非常奇怪的推断语句 if (c < 0x9 || c > 0x9 && c < 0xA || c > 0xA && c & ...

  7. XXE(XML External Entity attack)XML外部实体注入攻击

    导语 XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击.由于程序在解析输入的XML数据时,解析了攻击者 ...

  8. [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类

    [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...

  9. XML学习笔记(1)--XML概述

    XML基本概念 XML—extensible Markup Language(可扩展标记语言) XML最基本的三个概念 1)XML语言---描述事物本身(可扩展) 2)XSL语言---展现事物表现形式 ...

随机推荐

  1. Matlab命令合集 妈妈再也不用担心我不会用matlab了

    matlab命令 一.常用对象操作:除了一般windows窗口的常用功能键外.1.!dir 可以查看当前工作目录的文件. !dir& 可以在dos状态下查看.2.who 可以查看当前工作空间变 ...

  2. jQuery UI入门

    jQuery UI是jQuery的一个插件集,为jQuery的核心库添加了新的功能. jQUery UI库可以从http://jquery.com下载. 下载一个ZIP文件jquery-ui-1.9. ...

  3. CentOS7,将文本模式改成图形界面模式

    在以前通过vi /etc/inittab,将3修改成5.但是在centOS7之后将修改的办法换掉了,执行systemctl set-default graphical.target.根据提示进行一步一 ...

  4. Java虚拟机的平台无关性与语言无关性

    平台无关性 不同平台的不同java虚拟机,都执行同一种字节码文件,即Class文件 语言无关性 Java虚拟机不止能执行java程序,还有Clojure.Groovy.JRuby.Jython.Sca ...

  5. 通用Mapper(Mybatis)

    1.Mapper的简单介绍 2.Mapper的作用 通用Mapper可以通过Mybatis的拦截器原理,动态的帮我们实现单表的增删改查功能,大大降低了我们的开发成本,减少了我们的工作量. 3.Mapp ...

  6. LeetCode——palindrome-partitioning

    Question Given a string s, partition s such that every substring of the partition is a palindrome. R ...

  7. Gerrit使用感受

    CodeReivew好工具,可以随业务需求灵活配置权限等.

  8. bzoj 1101 zap 莫比乌斯

    1101: [POI2007]Zap Time Limit: 10 Sec  Memory Limit: 162 MB Description FGD正在破解一段密码,他需要回答很多类似的问题:对于给 ...

  9. C/C++输入数组

    ; printf("please enter the number:\n"); scanf("%d",&n); int *number=new int[ ...

  10. 安装rackspace private cloud --3 Deployment host

    on deploy host: 在deploy host上安装 Ubuntu Server 14.04 (Trusty Tahr) LTS 64-bit # apt-get install aptit ...