/// <summary>
/// 读取Xml
/// </summary>
/// <typeparam name="T">对应解析XML文件对象</typeparam>
public class XmlHelper<T> where T :class
{
#region 可以用的代码
//XML文件路径
private string filePath;
List<XElement> xelList = new List<XElement>();
public XmlHelper(string filePath)
{
this.filePath = filePath;
}
/// <summary>
/// 文件路径
/// </summary>
public string FilePath
{
get { return this.filePath; }
set { this.filePath = value; }
}
/// <summary>
/// 读取XML文件到自定义对象
/// </summary>
/// <returns>List<></returns>
public List<T> ReadXmlToObject()
{
xelList.Clear();
XmlReader reader = GetXmlReader();
Type type = typeof(T);
PropertyInfo[] fields = type.GetProperties();
List<T> list = new List<T>();
if (reader != null)
{
//载入XML文件获取根节点
XElement root = XElement.Load(reader);
reader.Close();
if (root.Name == type.Name)
{
xelList.Add(root);
}
QueryXelement(root, type.Name);
T t = default(T);
XElement temp = null;
//遍历符合条件的节点
foreach(var e in xelList)
{
//创建对象实例
t = (T)Activator.CreateInstance(type);
foreach (PropertyInfo info in fields)
{
temp = e.Element(info.Name);
if (temp != null)
{
info.SetValue(t, temp.Value, null);
}
}
list.Add(t);
}
}
return list;
}
private void QueryTest(XElement xele)
{
//var temp = from temp in xele.Elements() where temp.Name=="test" ;
}
/// <summary>
/// 分析XML文档节点
/// </summary>
/// <param name="xele">要分析的节点</param>
/// <param name="typeName">分析对象T的类型名称</param>
private void QueryXelement(XElement xele, string typeName)
{
//返回节点集合
var xeles = from temp in xele.Elements() select temp;
//如果符合条件的集合为0,Return
if (xeles.Count() == 0)
{
return;
}
else
{
foreach(XElement el in xeles)
{
if (el.Name == typeName)
{
xelList.Add(el);
}
QueryXelement(el, typeName);
}
}
}
/// <summary>
/// 获取XmlReader
/// </summary>
/// <returns>XmlReader</returns>
private XmlReader GetXmlReader()
{
XmlReader reader = null;
if (File.Exists(filePath))
{
reader = XmlReader.Create(filePath);
}
return reader;
}
}