XML序列化器读取XML数据

PS:标题我还真的不知道该怎么取比较好,大家将就下吧^_^

场景:上周接到一个任务,要求我把ASP写的会员充值功能,用ASP.NET复制一遍,没有给我需求文档,就是让我根据代码去分析业务逻辑,然后看到一个IP识别功能,就是判断该会员卡是否可以在该IP段内使用,看着一大片的用if
then 写的IP地址判断,我就蛋疼了。。。。

我就一直琢磨该怎么优化代码,开始用逗号去分割,然后把IP地址写在web.config中,但是太多了,然后请教同事,同事说可以用XML配置(web.config虽然也是XML,但是不在web.config中),然后用序列化读取。

废话了那么多,下面让我们开始吧!

1、根据需求创建一个XML文件,命名IPPackage


<?xml version="1.0" encoding="utf-8" ?>
<Root>
<city>
<!--城市标志-->
<flag>SX</flag>
<!--IP段-->
<ip>
<start>11.1.0.0</start>
<end>11.1.25.255</end>
</ip>
<ip>
<start>11.2.0.0</start>
<end>11.3.25.255</end>
</ip>
</city>
<city>
<!--城市标志-->
<flag>NX</flag>
<!--IP段-->
<ip>
<start>11.1.0.0</start>
<end>11.1.25.255</end>
</ip>
<ip>
<start>11.2.0.0</start>
<end>11.3.25.255</end>
</ip>
</city>
</Root>

2、创建一个IP类,然后用特性标识,如果你的类名称和字段名称与XML中的节点名称一样则不需要用特性标识


 1 /// <summary>
2 /// IP段
3 /// </summary>
4 public class IP
5 {
6 /// <summary>
7 /// [XmlElement(ElementName = "start")]用于标识IP节点中的start节点
8 /// </summary>
9 [XmlElement(ElementName = "start")]
10 public String StartIP { get; set; }
11
12 /// <summary>
13 /// [XmlElement(ElementName = "start")]用于标识IP节点中的end节点
14 /// </summary>
15 [XmlElement(ElementName = "end")]
16 public String EndIP { get; set; }
17 }

IP类,对应XML中的IP节点

3、创建一个CityIPList类


 1     /// <summary>
2 /// 城市IP集合
3 /// </summary>
4 public class CtiyIPList
5 {
6 [XmlElement(ElementName = "flag")]
7 public String CityFlag { get; set; }
8
9 [XmlElement(ElementName = "ip")]
10 public List<IP> IPList { get; set; }
11 }

CityIPList类

4、创建一个Root类


 1     /// <summary>
2 /// 整个XMLIP数据
3 /// </summary>
4 public class Root
5 {
6 /// <summary>
7 /// [XmlElement(ElementName = "city")]用于标识XML city节点
8 /// </summary>
9 [XmlElement(ElementName = "city")]
10 public List<CtiyIPList> All { get; set; }
11 }

Root类,类名与XML根节点名称一样

5、读取数据


1 //xml路径
2 string filePath = @"E:\WorkDocument\ConsoleApplication1\ConsoleApplication1\IPPackage.xml";
3 //读取文件
4 FileStream stream = new FileStream(filePath, FileMode.Open);
5 //序列化读取XML数据
6 XmlSerializer serializer = new XmlSerializer(typeof(Root));
7 Root list = (Root)serializer.Deserialize(stream);
8 stream.Close();

读取XML方法体

DEMO地址:链接: http://pan.baidu.com/s/1kTkKwb9 密码: obks

现在写下来,与大家共勉!

时间: 2024-10-10 15:18:33

XML序列化器读取XML数据的相关文章

使用XMl序列化器生成xml文件

生成XML文件 创建几个虚拟的短信对象,存在list中 备份数据通常都是备份至sd卡 使用StringBuffer拼接字符串 把整个xml文件所有节点append到sb对象里 sb.append("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"); //添加smss的开始节点 sb.append("<smss>"); ....... 把sb写到输出流中 fos.write(s

使用XML序列化器生成XML文件和利用pull解析XML文件

首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message> <sms> <body> 陈驰0 </body> <date> 1462162910995 </date> <address> 1380 </address> <type> 1 </type> &

Android 使用xml序列化器生成xml文件

在<Android 生成xml文件>一文中使用流的形式写入xml格式文件,但是存在一定的问题,那就是在短信内容中不能出现<>之类的括号,本文使用xml序列化器来解决 xml序列化器对象 XmlSerializer xs = Xml.newSerializer();* 给序列化器设置输出流 File file = new File(Environment.getExternalStorageDirectory(), "backupsms.xml"); FileOu

IOSerialize,xml和json,soap序列化器,二进制序列化器,XML序列化器,文件 检查、新增、复制、移动、删除

1 文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/读取配置文件3 三种序列化器4 xml和json1.文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/读取配置文件 using System.IO; /// <summary> /// 配置绝对路径 /// </summary> private static string LogPath = ConfigurationManager.AppSettings["LogPath&

使用Pull解析器生成XML文件和读取xml文件

有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器. 一.布局界面 [html] view plaincopyprint? <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

Android 存储学习之保存系统短信到SD卡(使用XML序列化器)

上节中我们是手动拼接xml文件,但是上节中那样的做法会有一个问题,比如: //插入消息的内容 sBuffer.append("<body>"); sBuffer.append(sms.getBody() + "</body>"); sBuffer.append("</body>"); 我在插入消息内容的时候,在追加内容里面加了个 </body>. 这样就会出现解析错误的 所以这节我们使用xml的序列

C#中使用XML指南之读取XML

? C#中使用XML指南之读取XML ? 访问的两种模型: ? 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题.流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文

使用java自带的xml解析器解析xml

使用java自带的xml解析器解析xml,其实我不推荐,可以用Dom解析,或其他的方式,因为Java自带的解析器使用不但麻烦,且还有bug出现. 它要求,针对不同的xml(结构不同),必须写对应的handler处理类,而Dom解析可以写通用的方法(前提是要写出通用逻辑)来处理,开发比较快.下面上代码 1 //------------------ main point --------------------- 2 javax.xml.parsers.SAXParserFactory 3 publ

Android下使用pull解析器生成XML文件、读取XML文件

Android下使用Pull解析器 1,Pull解析器的运行方式与SAX解析器相似.它提供了类似的事件,如:开始元素和结束元素事件. 2,使用parser.next()可以进入下一个元素并触发相应事件. 3,事件将作为一个int数值被发送,因此可以使用一个switch对相应的事件进行处理. 4,当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值. 5,相关API: 获得当前节点事件类型:parser.getEventType(); 获得下一节点事件类型