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. POJ3624 0-1背包(dp+滚动数组)

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 47440   Accepted: 20178 ...

  2. cocos2dx 2.1.x 退出SDK相关界面后EGLView 不刷新渲染

    报错内容为: [3390:1456879] failed to call contextcocos2d: surface size: 0x0[3390:1456879] Failed to make ...

  3. POJ 1226 Substrings

    Substrings Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. Original ID: ...

  4. nyoj 95 众数问题(set)

    众数问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数, 多重集合S重 ...

  5. image url to base64

    image url to base64 https://www.base64-image.de/ https://www.browserling.com/tools/image-to-base64 h ...

  6. 分块试水--CODEVS5037 线段树练习4加强版

    感觉这才算入门题吧..前面那些线段树练习,改几个字符就过了一定要搞成几道题.. n<=2e5的数列,给常数K<=2e5,m<=2e5个操作,区间加,问一个区间里K的倍数. 这题空间? ...

  7. 通过JQUERY获取SELECT OPTION中选中的值

    遇到一样学一样. 一个是取KEY,一个是取VALUE,一个是取所有文本. var dbuser_select = $("#dbuser_select option:selected" ...

  8. T1683 车厢重组 codevs

    http://codevs.cn/problem/1683/  时间限制: 1 s  空间限制: 1000 KB  题目等级 : 白银 Silver 题目描述 Description 在一个旧式的火车 ...

  9. memory management in oracle 11G R2

    When we talking about memory management in Oracle, we are refering to SGA and PGA. The management me ...

  10. using gdb to debug c program

    #include <stdio.h> static void display(int i, int *ptr); int main(void) { int x = 5; int *xptr ...