C# 读xml注释或过滤xml注释
有这么个需求:
要统计所有的配置文件,这些配置文件都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注释的更多相关文章
- 关于iBatis配置xml文件时出现中文注释出错的一个问题(很坑爹.)
才开始我没有使用SqlMap.properties来配置连接信息.所以直接用ctrl + shift + C然后往里面添加的中文注释 例: <!-- 注释--> 运行的时候报: Error ...
- mybites框架遇到的坑之Mapper.xml文件不要随意加注释和ORA-00911
原文链接:https://blog.csdn.net/streetlight8023/article/details/69388495/ 先说解决方法: org.mybatis.spring.MyBa ...
- 用saxon框架对xml数据进行过滤 - 程序员的天堂 - ITeye技术网站
用saxon框架对xml数据进行过滤 博客分类: Java Saxon 是一个 XSLT 和XQuery处理器.它是使用 XML 文档和样式表作为输入,然后生成结果文档作为输出的程序,它还包括了一 ...
- SQL注入之Sqli-labs系列第二十五关(过滤 OR & AND)和第二十五A关(过滤逻辑运算符注释符)
开始挑战第二十五关(Trick with OR & AND) 第二十五关A(Trick with comments) 0x1先查看源码 (1)这里的or和and采用了i正则匹配,大小写都无法绕 ...
- PHP过滤html注释
过滤html注释: 所谓过滤,不过是字符串的匹配与替换,这里我们用到的正则匹配替换函数preg_replace(reg,replace,string);,PHPer都清楚,这个函数的关键在于reg的精 ...
- xml 标准字符过滤
今天在代码里面看见一串非常奇怪的推断语句 if (c < 0x9 || c > 0x9 && c < 0xA || c > 0xA && c & ...
- XXE(XML External Entity attack)XML外部实体注入攻击
导语 XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击.由于程序在解析输入的XML数据时,解析了攻击者 ...
- [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类
[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...
- XML学习笔记(1)--XML概述
XML基本概念 XML—extensible Markup Language(可扩展标记语言) XML最基本的三个概念 1)XML语言---描述事物本身(可扩展) 2)XSL语言---展现事物表现形式 ...
随机推荐
- java的服务端与客户端通信(1)
一.理解socket 1.1什么是socket? socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络 ...
- Redis集群环境搭建
Redis集群cluster环境搭建 描述:本章节主要单服务器搭建集群,在一个服务器上启动多个不同端口的redis服务,非真实环境. 真实环境下redis集群会搭建在多个物理服务器上,并非单一的服务器 ...
- for语句中多重定义
"}; vector<string> vecStr(Arr, Arr + sizeof(Arr)/sizeof(string)); , sz = vecStr.size(); i ...
- redis 第二篇 系统命令简介 上
一.系统级命令(不归属任何一个数据结构) 从keys命令说起 1. 可以模式匹配 也就是可以用正则表达式的方式来匹配 格式为KEYS pattern glob风格通配符规则 ? 匹配一个字符 ...
- 20145231《Java程序设计》第三次实验报告
实验三 敏捷开发与XP实现 实验内容 XP基础 XP核心实践 相关工具 实验要求 了解敏捷开发的基本方法以及XP软件开发的相关准则:了解代码编写的标准和原则:体会结对编程的好处: 实践体会版本控制的方 ...
- Pytorch的gather用法理解
先放一张表,可以看成是二维数组 行(列)索引 索引0 索引1 索引2 索引3 索引0 0 1 2 3 索引1 4 5 6 7 索引2 8 9 10 11 索引3 12 13 14 15 看一下下面例子 ...
- js学习笔记1(变量、作用域、内存)
写在前面,舍弃叽叽歪歪,只做学习笔记,认真踏实. 学习书籍:javascript高级程序设计3版. 章节4.1 基本类型和引用类型 1.基本类型在内存中占据固定大小的空间,所以保存在栈内存中. 2.从 ...
- WebUploader API文档
Web Uploader内部类的详细说明,以下提及的功能类,都可以在WebUploader这个变量中访问到. As you know, Web Uploader的每个文件都是用过AMD规范中的defi ...
- showModalDialog改进版,包括Chrome下的特殊处理
父页面: if(window.ActiveXObject){ //IE $("#choose_entp").click(function(){ ...
- vs+mysql+ef配置方法
这次的项目用的是MySQL数据库,但是ADO.NET实体数据模型默认是不支持MySQL数据库的,本文档将介绍如何让VS ADO.NET实体数据模型支持MySQL. 一.安装插件 1.VS插件 mysq ...