using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace WebApplication1.AppCode
{
using System.Reflection;
using System.Xml; public class XmlTools
{
static XmlHelper xmlHelper = new XmlHelper(); /// <summary>
/// 将节点属性 转换成 Dictionary<string, string>
/// </summary>
/// <param name="nodeName"></param>
/// <returns></returns>
public static Dictionary<string, string> GetNodeAttrDict(XmlNode node)
{
Dictionary<string, string> dict = new Dictionary<string, string>(); if (node != null)
{
foreach (XmlAttribute attr in node.Attributes)
{
dict.Add(attr.Name, attr.Value);
}
}
return dict;
} /// <summary>
/// 获取多个节点
/// </summary>
/// <param name="xPath"></param>
/// <returns></returns>
public static List<XmlNode> GetXmlNodes(string xPath)
{
return xmlHelper.GetXmlNodeList(xPath);
}
/// <summary>
/// 获取单个节点
/// </summary>
/// <param name="xPath"></param>
/// <returns></returns>
public static XmlNode GetXmlNode(string xPath)
{
return xmlHelper.GetXmlNode(xPath);
}
/// <summary>
/// 节点转换成实体列表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="nodes"></param>
/// <returns></returns>
public static List<T> ConvertXml2Entity<T>(List<XmlNode> nodes) where T : class,new()
{
return xmlHelper.GetEntityListByXmlNode<T>(nodes);
} /// 节点转换为实体
/// 注意:没有匹配到的字段为NULL
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="node"></param>
/// <returns></returns>
public static T ConvertXml2Entity<T>(XmlNode node) where T : class,new()
{
return xmlHelper.GetEntityByXmlNode<T>(node);
} /// <summary>
/// 获取节点文本内容
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
public static string GetNoteTxt(XmlNode node)
{
return node != null ? node.InnerText : "";
}
/// <summary>
/// 获取节点整数文本
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
public static int GetNode2Int(XmlNode node)
{
int _result = 0;
if (node != null)
{
int.TryParse(node.InnerText.Trim(), out _result);
}
return _result;
} } public class XmlHelper
{
XmlDocument xmlDoc = new XmlDocument();
public XmlHelper()
{
string xmlPath = HttpRuntime.AppDomainAppPath + "\\Files\\BaseConfig.xml";
xmlDoc.Load(xmlPath);
} public List<XmlNode> GetXmlNodeList(string nodeName)
{
List<XmlNode> list = new List<XmlNode>();
XmlNodeList nodeList = xmlDoc.SelectNodes(nodeName);
foreach (XmlNode node in nodeList)
{
list.Add(node);
}
return list;
} public XmlNode GetXmlNode(string nodeName)
{
return xmlDoc.SelectSingleNode(nodeName);
} /// <summary>
/// 将节点属性 转换成 Dictionary<string, string>
/// </summary>
/// <param name="nodeName"></param>
/// <returns></returns>
public static Dictionary<string, string> GetNodeAttrDict(XmlNode node)
{
Dictionary<string, string> dict = new Dictionary<string, string>(); if (node != null)
{
foreach (XmlAttribute attr in node.Attributes)
{
dict.Add(attr.Name, attr.Value);
}
}
return dict;
} public List<T> GetEntityListByXmlNode<T>(List<XmlNode> nodeList) where T : class,new()
{
List<T> list = new List<T>();
foreach (XmlNode item in nodeList)
{
list.Add(GetEntityByXmlNode<T>(item));
}
return list;
} public T GetEntityByXmlNode<T>(XmlNode node) where T : class,new()
{
return ConvertXml2Entity<T>(node);
} private T ConvertXml2Entity<T>(XmlNode node) where T : class,new()
{
if (node == null)
{
return default(T);
}
var entity = new T();
List<PropertyInfo> propsList = entity.GetType().GetProperties().ToList(); foreach (PropertyInfo prop in propsList)
{
var nodeObj = node.Attributes[prop.Name];
if (nodeObj != null)
{
var objValue = GetPropValue(prop.PropertyType.Name, nodeObj.Value);
prop.SetValue(entity, objValue, null);
}
} return entity;
} private object GetPropValue(string propName, string data)
{
object obj = data;
switch (propName)
{ case "DateTime":
obj = DateTime.Parse(data);
break;
case "Boolean":
obj = Boolean.Parse(data);
break;
case "Int32":
obj = int.Parse(data);
break;
case "Int64":
obj = long.Parse(data);
break;
case "Double":
obj = double.Parse(data);
break;
} return obj;
} }
}

  

Xml的读取的更多相关文章

  1. php xml 文件读取 XMLReader

    php xml 文件读取 <?php /** $xmlString = '<xml> <persons count="10"> <person ...

  2. 利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合

    转自:http://blog.csdn.net/zhao19861029/article/details/8473245 首先实现生成对应的JAVAbean的XML文件方法 /** * DMO4J写入 ...

  3. Webwork 学习之路【05】请求跳转前 xwork.xml 的读取

    个人理解 WebWork 与 Struts2 都是将xml配置文件作为 Controler 跳转的基本依据,WebWork 跳转 Action 前 xml 文件的读取依赖 xwork-1.0.jar, ...

  4. 使用XmlPullParser对xml进行读取

    XML文件是一种标记性语言;在开发中经常在接口交互时被用作报文传输或者把自定义的类序列化为XML的形式存储到数据库.正因为XML文件这么常用,使用JAVA对XML文件进行读写操作是每一个开发人员必须掌 ...

  5. XML数据读取方式性能比较(一)

    原文:XML数据读取方式性能比较(一) 几个月来,疑被SOA,一直在和XML操作打交道,SQL差不多又忘光了.现在已经知道,至少有四种常用人XML数据操作方式(好像Java差不多),不过还没有实际比较 ...

  6. 使用OPEN XML SDK 读取EXCEL中的超链接Hyperlink

    使用OPEN XML SDK 读取EXCEL中的超链接Hyperlink 原理 先创建一个包括全部EXCEL单元格中超链接Hyperlink数据的表,再定位单元格通过列头(如A1,B1)获取超链接信息 ...

  7. Java 操纵XML之读取XML文件

    Java 操纵XML之读取XML文件 一.JAVA DOM PARSER DOM interfaces The DOM defines several Java interfaces. Here ar ...

  8. Webwork【05】请求跳转前 xwork.xml 的读取

    个人理解 WebWork 与 Struts2 都是将xml配置文件作为 Controler 跳转的基本依据,WebWork 跳转 Action 前 xml 文件的读取依赖 xwork-1.0.jar, ...

  9. javascript读取xml文件读取节点数据的例子

    分享下用javascript读取xml文件读取节点数据方法. 读取的节点数据,还有一种情况是读取节点属性数据. <head> <title></title> < ...

  10. C#中XML的读取

    本文主要介绍在C#中有关XML的读取,写入操作. 1.XML的内容如下: <?xml version="1.0" encoding="utf-8" ?&g ...

随机推荐

  1. [luoguP1351] 联合权值(Dfs)

    传送门 距离为2的点会产生权值,第一问,只需要在dfs的时候把一个点相邻的点都处理出来就行. 具体处理方式看代码,然而这样只处理了一遍,最后在乘2就好了. 第二问只需要处理一个点相邻的点中最大的和次大 ...

  2. codevs4419 FFF 团卧底的菊花

    题目描述 Description FFF 团卧底在这次出题后就知道他的菊花可能有巨大的危险,于是他提前摆布好了菊花阵,现在菊花阵里有若干朵菊花,出现次数最多的那一朵就是出题人的,你的任务是需要找出出题 ...

  3. Keywords Search AC自动机

    In the modern time, Search engine came into the life of everybody like Google, Baidu, etc. Wiskey al ...

  4. 夜话JAVA设计模式之策略模式

    策略模式     定义了算法簇,分别封装起来,让他们之间可以互相替换,让算法簇的变化独立于使用算法的客户.设计原则1     找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在 ...

  5. Codeforces Round #403(div 2)

    A =w= B 题意:一个数轴上有n个整点,每个点都有一个速度,选一个点让他们集合,使得时间最少. 分析: 直接三分 C 题意:给定一棵树,任意两个距离小等于二的点不能染相同的颜色,求最小颜色数和染色 ...

  6. JVM内存分布和垃圾回收

    内存区域划分   程序计数器(Program counter Register) 描述  程序计数器(Program Counter Register)是一块较小的内存空间.它可以看作是当前线程执行的 ...

  7. 为什么Linux下的环境变量要用大写而不是小写

    境变量的名称通常用大写字母来定义.实际上用小写字母来定义环境变量也不会报错,只是习惯上都是用大写字母来表示的. 首先说明一下,在Windows下是不区分大小写的,所以在Windows下怎么写都能获取到 ...

  8. nodejs 安装express

    在命令行中执行 "npm install -g express"等待下载并且自动完成安装.测试express完成安装的一个方法就是查看其版本号,执行命令 “express -V”正 ...

  9. c++中的set_new_handler和new_handler

    当operator new申请一个内存失败的时候,它会进行如下的处理步骤:    1.如果存在客户指定的处理函数,则调用处理函数(new_handler),如果不存在则抛出一个异常. 2.继续申请内存 ...

  10. docker Cannot start container [8] System error: exec format error

    docker Cannot start container  [8] System error: exec format error 学习了:https://www.aliyun.com/jiaoch ...