using Epost.Model;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
namespace Epost.Common
{
///
/// XmlHelper XML 操作
///
public class XmlHelper
{
#region 获取XML 内容
///
/// 获取XML 内容
///
/// 路径,XML文档
/// 1路径,2文档
///
public static XmlDocument GetLoadXml(string load, int Act)
{
XmlDocument doc = new XmlDocument();
try
{
if (Act == 1)
{
doc.Load(FileHelper.GeAbsolutePath(load));
}
else if (Act == 2)
{
doc.LoadXml(load);
}
}
catch (Exception er)
{
throw er;
}
return doc;
}
#endregion
#region 创建一个节点
///
/// 创建一个节点 列
/// XmlDocument doc = Commonly.XmlOperating.GetLoadXml(GetXML(2), 2);
/// XmlNode root = doc.SelectSingleNode("bookstore");
/// string[] Nodetype = { "genre", "ISBN" };
/// string[] Nodetypeval = { "李赞红", "2-3631-4" };
/// XmlElement xmlent = Commonly.XmlOperating.CreateNode(doc, "book", Nodetype, Nodetypeval, ""); //创建book节点
/// XmlElement xmlent1 = Commonly.XmlOperating.CreateNode(doc, "title", null, null, "CS从入门到精通");
/// xmlent.AppendChild(xmlent1);
/// root.AppendChild(xmlent); //也可以直接添加 doc.AppendChild(xmlent)
/// doc.Save(Server.MapPath("/bookstore.xml"));
///
/// XmlDocument
/// 节点名称
/// 节点属性类型
/// 节点属性值
/// 节点中的内容
///
public static XmlElement CreateNode(XmlDocument doc, string NodeName, string[] Nodetype, string[] NodetypeVal, string Text)
{
XmlElement xmlent = doc.CreateElement(NodeName); //创建节点名称
try
{
if (Nodetype != null)
{
for (int i = 0; i < Nodetype.Length; i++)
{
xmlent.SetAttribute(Nodetype[i], NodetypeVal[i]); //添加节点属性和属性值
}
}
if (Text != "" && Text != null)
{
xmlent.InnerText = Text;
}
}
catch (Exception er)
{
throw er;
}
return xmlent;
}
#endregion
#region 直接通过XM类 获取内容
//XmlNode xn = xmlDoc.SelectSingleNode("bookstore");
//XmlNodeList xnl = xn.ChildNodes;
//foreach (XmlNode xnf in xnl)
//{
// XmlElement xe = (XmlElement)xnf;
// Console.WriteLine(xe.GetAttribute("genre"));//显示属性值
// Console.WriteLine(xe.GetAttribute("ISBN"));
// XmlNodeList xnf1 = xe.ChildNodes;
// foreach (XmlNode xn2 in xnf1)
// {
// Console.WriteLine(xn2.InnerText);//显示子节点点文本
// }
//}
#endregion
#region 通过XML路径获取 DataSet
///
/// 读取xml直接返回DataSet
/// 有几个tr类型就生成几个表 外加table一个表
/// 表面就是
/// ds.Tables["LicenseKey"].Columns.Count// 列号
/// ds.Tables["LicenseKey"].Rows[0][列号].ToString()
///
/// xml文件相对路径
///
public static DataSet GetDataSetByXml(string strXmlPath)
{
try
{
DataSet ds = new DataSet();
ds.ReadXml(FileHelper.GeAbsolutePath(strXmlPath));
if (ds.Tables.Count > 0)
{
return ds;
}
}
catch (Exception ee)
{
throw new Exception(ee.Message);
}
return null;
}
#endregion
#region 通过XML字符串获取 DataSeet
///
/// 读取xml字符串直接返回DataSet
/// 有几个tr类型就生成几个表 外加table一个表
/// 表面就是
/// ds.Tables["LicenseKey"].Columns.Count// 列号
/// ds.Tables["LicenseKey"].Rows[0][列号].ToString()
///
/// xml字符串
///
public static DataSet GetDataSetStrXml(string strXmlData)
{
try
{
DataSet ds = new DataSet();
using (StringReader xmlread = new StringReader(strXmlData))
{
ds.ReadXml(xmlread, XmlReadMode.InferTypedSchema);
if (ds.Tables.Count > 0)
{
return ds;
}
}
}
catch (Exception ee)
{
throw new Exception(ee.Message);
}
return null;
}
#endregion
#region DataSet 转换成 XML
///
/// DataSet 转换成 XML
///
///
///
public static string GetXMLData(DataSet ds)
{
if (ds != null)
{
return ds.GetXml();
}
return "";
}
#endregion
#region XML节点属性修改
///
/// XML节点属性修改
///
///
/// 节点集合
/// XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes
///
/// 属性名称
/// 属性值
/// 修改的属性值
/// 是否修改 节点下的子节点
public static void UpdateXmlNodeType(XmlNodeList nodelist, string typeName, string typeval, string updatetypeval, bool checkchild)
{
try
{
foreach (XmlNode xmlnode in nodelist)
{
XmlElement xmlent = (XmlElement)xmlnode;
UpdateXmlNodeType(xmlent, typeName, typeval, updatetypeval);
if (xmlent.HasChildNodes && checkchild) //如果该节点下还有节点 继续搜索
{
UpdateXmlNodeType(xmlent.ChildNodes, typeName, typeval, updatetypeval, checkchild);
}
}
}
catch (Exception ex)
{
throw ex;
}
}
///
/// XML节点属性修改
///
/// 节点
/// 属性名称
/// 属性值
/// 修改的属性值
public static void UpdateXmlNodeType(XmlElement xmlent, string typeName, string typeval, string updatetypeval)
{
if (xmlent.GetAttribute(typeName) == typeval)
{
xmlent.SetAttribute(typeName, updatetypeval);
}
}
#endregion
#region XML节点的值进行修改
///
/// XML节点的值进行修改
///
///
/// 节点集合
/// XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes
///
/// 节点名
/// 修改的值
/// 是否修改 节点下的子节点
public static void UpdateXmlNodeText(XmlNodeList nodelist, string TName, string updatetext, bool checkchild)
{
try
{
foreach (XmlNode node in nodelist)
{
XmlElement xmlent = (XmlElement)node;
UpdateXmlNodeText(xmlent, TName, updatetext);
if (xmlent.HasChildNodes && checkchild) //如果该节点下还有节点 继续搜索
{
UpdateXmlNodeText(xmlent.ChildNodes, TName, updatetext, checkchild);
}
}
}
catch (Exception ex)
{
throw ex;
}
}
///
/// XML节点的值进行修改
///
/// 节点
/// 节点名
/// 修改的值
public static void UpdateXmlNodeText(XmlElement xmlent, string TName, string updatetext)
{
if (xmlent.Name == TName)
{
xmlent.InnerText = updatetext;
}
}
#endregion
#region XML节点属性删除
///
/// XML节点属性删除
///
///
/// 节点集合
/// XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes
///
/// 属性名
/// 属性的值
public static void DelXmlNodeType(XmlNodeList nodelist, string typename, string typeval)
{
try
{
foreach (XmlNode node in nodelist)
{
XmlElement xmlent = (XmlElement)node;
DelXmlNodeType(xmlent, typename, typeval);
}
}
catch (Exception ee)
{
throw ee;
}
}
///
/// XML节点属性删除
///
/// 节点
/// 属性名称
/// 属性值
public static void DelXmlNodeType(XmlElement xmlent, string typename, string typeval)
{
if (xmlent.GetAttribute(typename) == typeval)
{
xmlent.RemoveAttribute(typename);
}
}
#endregion
#region XML节点的全部内容删除和该节点的创建属性,不删除默认属性
///
/// XML节点的全部内容删除 和该节点的创建属性,不删除默认属性
///
///
/// 节点集合
/// XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes
///
/// 节点名称
public static void DelXmlNodeAll(XmlNodeList nodelist, string Tname)
{
try
{
foreach (XmlNode node in nodelist)
{
XmlElement xmlent = (XmlElement)node;
DelXmlNodeAll(xmlent, Tname);
}
}
catch (Exception ee)
{
throw ee;
}
}
///
/// XML节点的全部内容删除 和该节点的创建属性,不删除默认属性
///
/// 节点
/// 节点名
public static void DelXmlNodeAll(XmlElement xmlent, string Tname)
{
if (xmlent.Name == Tname)
{
xmlent.RemoveAll(); //移除内容
}
}
#endregion
#region XML反序列化
///
/// XML反序列化
///
/// 对象类型 (注意类型就是 读取节点的名称)
/// 文件路径
///
public static T GetDeserialization(string filename)
{
FileStream fs = null;
try
{
fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
XmlSerializer serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(fs);
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (fs != null)
fs.Close();
}
}
#endregion
#region 将XML反序列化成对象
///
/// 将XML反序列化成对象
///
///
///
///
///
public static T XMLToObject(string source, Encoding encoding)
{
XmlSerializer mySerializer = new XmlSerializer(typeof(T));
using (MemoryStream stream = new MemoryStream(encoding.GetBytes(source)))
{
return (T)mySerializer.Deserialize(stream);
}
}
#endregion
#region XML序列化
///
/// XML序列化
///
/// 对象
/// 文件路径
public static void SaveDeserialization(object obj, string filename)
{
FileStream fs = null;
try
{
fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
XmlSerializer serializer = new XmlSerializer(obj.GetType());
serializer.Serialize(fs, obj);
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (fs != null)
fs.Close();
}
}
#endregion
//#region 获取Config数据
/////
///// 获取Config数据
/////
///// 节点名称
/////
//public static string GetXmlMapPath(string xmlname)
//{
// return ConfigurationManager.AppSettings[xmlname].ToString();
//}
//#endregion
public List ReadControlByXML(string path, string nodename)
{
XElement xe = XElement.Load(path);
IEnumerable elements = from ele in xe.Elements(nodename)
select ele;
return GetControlByElements(elements);
}
public List GetControlByElements(IEnumerable elements)
{
List list = new List();
foreach (var ele in elements)
{
ControlModel model = new ControlModel();
model.ControlName = ele.Element("ControlName").Value;
model.ControlBus = ele.Element("ControlBus").Value;
model.ControlIP = ele.Element("ControlIP").Value;
model.ControlID = ele.FirstAttribute.Value;
list.Add(model);
}
return list;
}
public ControlModel ReadControlByXML(string path, string nodename, string controlIP)
{
XElement xe = XElement.Load(path);
IEnumerable elements = from ele in xe.Elements(nodename)
select ele;
return GetControlByControlIP(elements, controlIP);
}
public ControlModel GetControlByControlIP(IEnumerable elements, string controlIP)
{
ControlModel model = new ControlModel();
foreach (var ele in elements)
{
if (ele.Element("ControlIP").Value == controlIP)
{
model.ControlName = ele.Element("ControlName").Value;
model.ControlBus = ele.Element("ControlBus").Value;
model.ControlIP = ele.Element("ControlIP").Value;
break;
}
}
return model;
}
}
}