using System;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;
using System.Web;
namespace Cloth.Common
{
/// <summary>
/// XmlHelper 的摘要說明。
/// </summary>
public class XmlHelper
{
public enum EnumXmlPathType
{
AbsolutePath,
VirtualPath
}
private string xmlfilepath ;
private EnumXmlPathType xmlfilepathtype ;
private XmlDocument xmldoc = new XmlDocument();
public string XmlFilePath
{
set
{
xmlfilepath = value ;
}
}
public EnumXmlPathType XmlFilePathtype
{
set
{
xmlfilepathtype = value ;
}
}
public XmlHelper()
{
//
// TODO: 在此處添加構造函數邏輯
//
}
public XmlHelper( string tempxmlfilepath )
{
// todo: 在此處添加構造函數邏輯
this.XmlFilePathtype = EnumXmlPathType.VirtualPath;
this.XmlFilePath = tempxmlfilepath ;
xmldoc=GetXmlDocument();
}
public XmlHelper( string tempxmlfilepath , EnumXmlPathType tempxmlfilepathtype )
{
// todo: 在此處添加構造函數邏輯
this.XmlFilePathtype = tempxmlfilepathtype;
this.XmlFilePath = tempxmlfilepath ;
xmldoc=GetXmlDocument() ;
}
#region 讀取xml文件
// </summary>
// <param name="strentitytypename">實體類的名稱</param>
// <returns>指定的xml描述文件的路徑</returns>
private XmlDocument GetXmlDocument()
{
XmlDocument doc=null;
if( this.xmlfilepathtype == EnumXmlPathType.AbsolutePath )
{
doc = GetXmlDocumentFromFile( xmlfilepath ) ;
}
else if( this.xmlfilepathtype == EnumXmlPathType.VirtualPath)
{
doc = GetXmlDocumentFromFile(HttpContext.Current.Server.MapPath(xmlfilepath));
}
return doc;
}
#endregion
#region 按路徑讀取xml文件
private XmlDocument GetXmlDocumentFromFile(string tempxmlfilepath)
{
string xmlfilefullpath = tempxmlfilepath ;
xmldoc.Load(xmlfilefullpath) ;
return xmldoc ;
}
#endregion
#region 讀取指定節點的指定屬性值
// <summary>
// 功能:
// 讀取指定節點的指定屬性值
//
// 參數:
// 參數一:節點路徑
// 參數二:此節點的屬性
// </summary>
// <param name="xmlnodepath"></param>
// <param name="xmlnodeattribute"></param>
// <returns></returns>
public string GetXmlNodeAttributeValue(string xmlnodepath,string xmlnodeattribute)
{
string strreturn = "";
try
{
//根據指定路徑獲取節點
XmlNode xmlnode = xmldoc.SelectSingleNode(xmlnodepath) ;
//獲取節點的屬性,並循環取出需要的屬性值
XmlAttributeCollection xmlattr = xmlnode.Attributes;
for(int i=0 ;i<xmlattr.Count; i++)
{
if (xmlattr.Item(i).Name == xmlnodeattribute)
strreturn = xmlattr.Item(i).Value;
}
}
catch(XmlException xmle)
{
throw xmle ;
}
return strreturn ;
}
#endregion
#region 讀取指定節點集合第n個節點
// <summary>
// 功能:
// 讀取指定節點集合第n個節點的值
//
// 參數:
// 參數:節點集路徑
// </summary>
// <param name="xmlnodepath"></param>
// <returns></returns>
// 參數:
// 參數:序號
// </summary>
// <param name="index"></param>
// <returns></returns>
public XmlNode GetSubIndexNode(string xmlnodepath,int index)
{
XmlNode xmlnode=null;
try
{
//根據路徑獲取節點
XmlNodeList nodelist=xmldoc.SelectNodes(xmlnodepath);
xmlnode = nodelist[index];
}
catch(XmlException xmle)
{
System.Console.WriteLine(xmle.Message) ;
}
return xmlnode;
}
#endregion
#region 讀取指定節點的值
// <summary>
// 功能:
// 讀取指定節點的值
//
// 參數:
// 參數:節點名稱
// </summary>
// <param name="xmlnodepath"></param>
// <returns></returns>
public string GetXmlNodeValue(string xmlnodepath)
{
string strreturn = string.Empty;
try
{
//根據路徑獲取節點
XmlNode xmlnode = xmldoc.SelectSingleNode(xmlnodepath) ;
strreturn = xmlnode.InnerText ;
}
catch(XmlException xmle)
{
System.Console.WriteLine(xmle.Message) ;
}
return strreturn ;
}
#endregion
#region 讀取指定節點的子節點個數
// <summary>
// 功能:
// 讀取指定節點的子節點個數
//
// 參數:
// 參數:節點名稱
// </summary>
// <param name="xmlnodepath"></param>
// <returns></returns>
public int GetXmlNodeSubCount(string xmlnodepath)
{
int intreturn = 0;
try
{
//根據路徑獲取節點
XmlNode xmlnode = xmldoc.SelectSingleNode(xmlnodepath) ;
intreturn = xmlnode.ChildNodes.Count;
}
catch(XmlException xmle)
{
System.Console.WriteLine(xmle.Message) ;
}
return intreturn ;
}
#endregion
#region 讀取指定節點的第index個子節點
// <summary>
// 功能:
// 讀取指定節點的子節點個數
//
// 參數:
// 參數:節點名稱
// </summary>
// <param name="xmlnodepath"></param>
// <returns></returns>
public XmlNode GetXmlNodeIndexSub(string xmlnodepath,int index)
{
XmlNode nodereturn = null;
try
{
//根據路徑獲取節點
XmlNodeList list = xmldoc.SelectNodes(xmlnodepath);
nodereturn=list[index];
}
catch(XmlException xmle)
{
System.Console.WriteLine(xmle.Message) ;
}
return nodereturn ;
}
#endregion
#region 讀取指定節點集合節點個數
// <summary>
// 功能:
// 讀取指定節點的子節點個數
//
// 參數:
// 參數:節點名稱
// </summary>
// <param name="xmlnodepath"></param>
// <returns></returns>
public int GetSubXmlNodeCount(string xmlnodepath)
{
int intreturn = 0;
try
{
//根據路徑獲取節點
XmlNodeList list = xmldoc.SelectNodes(xmlnodepath) ;
intreturn = list.Count;
}
catch(XmlException xmle)
{
System.Console.WriteLine(xmle.Message) ;
}
return intreturn ;
}
#endregion
#region 讀取指定節點集合第n個節點的值
// <summary>
// 功能:
// 讀取指定節點集合第n個節點的值
//
// 參數:
// 參數:節點集路徑
// </summary>
// <param name="xmlnodepath"></param>
// <returns></returns>
// 參數:
// 參數:序號
// </summary>
// <param name="index"></param>
// <returns></returns>
public string GetSubIndexNodeValue(string xmlnodepath,int index)
{
string strreturn = string.Empty;
try
{
XmlNode xmlnode = GetSubIndexNode(xmlnodepath,index);
strreturn = xmlnode.InnerText ;
}
catch(XmlException xmle)
{
System.Console.WriteLine(xmle.Message) ;
}
return strreturn ;
}
#endregion
#region 讀取指定節點集合第n個節點的屬性值
// <summary>
// 功能:
// 讀取指定節點集合第n個節點的值
//
// 參數:
// 參數:節點集路徑
// </summary>
// <param name="xmlnodepath"></param>
// <returns></returns>
// 參數:
// 參數:序號
// </summary>
// <param name="index"></param>
// <returns></returns>
// 參數:
// 參數:屬性名
// </summary>
// <param name="xmlnodeattribute"></param>
// <returns></returns>
public string GetSubIndexNodeAttributeValue(string xmlnodepath,int index,string xmlnodeattribute)
{
string strreturn = string.Empty;
try
{
XmlNode xmlnode = GetSubIndexNode(xmlnodepath,index);
//獲取節點的屬性,並循環取出需要的屬性值
XmlAttributeCollection xmlattr = xmlnode.Attributes;
for(int i=0 ;i<xmlattr.Count; i++)
{
if (xmlattr.Item(i).Name == xmlnodeattribute)
strreturn = xmlattr.Item(i).Value;
}
}
catch(XmlException xmle)
{
System.Console.WriteLine(xmle.Message) ;
}
return strreturn ;
}
#endregion
#region 讀取指定節點的子節點中指定屬性index爲指定屬性內容的節點值
// <summary>
// 功能:
// 讀取指定節點的子節點中指定屬性index爲指定屬性內容的節點值
//
// 參數:
// 參數:節點集路徑
// </summary>
// <param name="xmlnodepath"></param>
// <returns></returns>
// 參數:
// 參數:屬性序號
// </summary>
// <param name="attributeindex"></param>
// <returns></returns>
// 參數:
// 參數:屬性值
// </summary>
// <param name="attributtevalue"></param>
// <returns></returns>
public string GetSubNodeValueByAttributeValue(string xmlnodepath,int attributeindex,string attributtevalue)
{
string strreturn = string.Empty;
try
{
XmlNode xmlnode = xmldoc.SelectSingleNode(xmlnodepath);
XmlNodeList nodelist=xmlnode.ChildNodes;
XmlNode subnode;
for(int i=0;i<nodelist.Count;i++)
{
subnode=nodelist[i];
if(subnode.Attributes[attributeindex].Value==attributtevalue)
{
strreturn=subnode.Value;
}
}
}
catch(XmlException xmle)
{
System.Console.WriteLine(xmle.Message) ;
}
return strreturn ;
}
#endregion
#region 讀取指定節點的子節點中指定屬性名爲指定屬性內容的節點值
// <summary>
// 功能:
// 讀取指定節點的子節點中指定屬性名爲指定屬性內容的節點值
//
// 參數:
// 參數:節點集路徑
// </summary>
// <param name="xmlnodepath"></param>
// <returns></returns>
// 參數:
// 參數:屬性名
// </summary>
// <param name="attributename"></param>
// <returns></returns>
// 參數:
// 參數:屬性值
// </summary>
// <param name="attributtevalue"></param>
// <returns></returns>
public string GetSubNodeValueByAttributeValue(string xmlnodepath,string attributename,string attributtevalue)
{
string strreturn = string.Empty;
try
{
XmlNode xmlnode = xmldoc.SelectSingleNode(xmlnodepath);
XmlNodeList nodelist=xmlnode.ChildNodes;
XmlNode subnode;
for(int i=0;i<nodelist.Count;i++)
{
subnode=nodelist[i];
if(subnode.Attributes[attributename].Value==attributtevalue)
{
strreturn=subnode.InnerText;
}
}
}
catch(XmlException xmle)
{
System.Console.WriteLine(xmle.Message) ;
}
return strreturn ;
}
#endregion
#region 讀取指定節點集合第n個節點的第幾個屬性值
// <summary>
// 功能:
// 讀取指定節點集合第n個節點的值
//
// 參數:
// 參數:節點集路徑
// </summary>
// <param name="xmlnodepath"></param>
// <returns></returns>
// 參數:
// 參數:序號
// </summary>
// <param name="index"></param>
// <returns></returns>
// 參數:
// 參數:屬性名
// </summary>
// <param name="Attributeindex"></param>
// <returns></returns>
public string GetSubIndexNodeAttributeValue(string xmlnodepath,int index,int attributeindex)
{
string strreturn = string.Empty;
try
{
XmlNode xmlnode = GetSubIndexNode(xmlnodepath,index);
//獲取節點的屬性,並循環取出需要的屬性值
XmlAttributeCollection xmlattr = xmlnode.Attributes;
strreturn = xmlattr.Item(attributeindex).Value;
}
catch(XmlException xmle)
{
System.Console.WriteLine(xmle.Message) ;
}
return strreturn ;
}
#endregion
#region 設置節點值
// <summary>
// 功能:
// 設置節點值
//
// 參數:
// 參數一:節點的名稱
// 參數二:節點值
//
// </summary>
// <param name="xmlnodepath"></param>
// <param name="xmlnodevalue"></param>
public void SetXmlNodeValue(string xmlnodepath,string xmlnodevalue)
{
try
{
//根據指定路徑獲取節點
XmlNode xmlnode = xmldoc.SelectSingleNode(xmlnodepath) ;
//設置節點值
xmlnode.InnerText = xmlnodevalue ;
}
catch(XmlException xmle)
{
throw xmle ;
}
}
#endregion
#region 設置節點的屬性值
// <summary>
// 功能:
// 設置節點的屬性值
//
// 參數:
// 參數一:節點名稱
// 參數二:屬性名稱
// 參數三:屬性值
//
// </summary>
// <param name="xmlnodepath"></param>
// <param name="xmlnodeattribute"></param>
// <param name="xmlnodeattributevalue"></param>
public void SetXmlNodeValue(string xmlnodepath,string xmlnodeattribute,string xmlnodeattributevalue)
{
try
{
//根據指定路徑獲取節點
XmlNode xmlnode = xmldoc.SelectSingleNode(xmlnodepath) ;
//獲取節點的屬性,並循環取出需要的屬性值
XmlAttributeCollection xmlattr = xmlnode.Attributes ;
for(int i=0 ; i<xmlattr.Count ; i++)
{
if ( xmlattr.Item(i).Name == xmlnodeattribute )
{
xmlattr.Item(i).Value = xmlnodeattributevalue;
break ;
}
}
}
catch(XmlException xmle)
{
throw xmle ;
}
SaveXmlDocument();
}
#endregion
#region 獲取xml文件的根元素
// <summary>
// 獲取xml文件的根元素
// </summary>
public XmlNode GetXmlRoot()
{
return xmldoc.DocumentElement ;
}
#endregion
#region 在根節點下添加父節點
// <summary>
// 在根節點下添加父節點
// </summary>
public void AddParentNode(string parentnode)
{
XmlNode root = GetXmlRoot() ;
XmlNode parentxmlnode = xmldoc.CreateElement(parentnode) ;
root.AppendChild(parentxmlnode) ;
}
#endregion
#region 向一個已經存在的父節點中插入一個子節點
// <summary>
// 向一個已經存在的父節點中插入一個子節點
// </summary>
public void AddChildNode( string parentnodepath,string childnodename )
{
XmlNode parentxmlnode = xmldoc.SelectSingleNode(parentnodepath) ;
XmlNode childxmlnode = xmldoc.CreateElement(childnodename) ;
parentxmlnode.AppendChild( childxmlnode ) ;
}
#endregion
#region 向一個節點添加屬性
// <summary>
// 向一個節點添加屬性
// </summary>
public void AddAttribute( string xmlnodepath , string xmlnodeattribute)
{
XmlAttribute nodeattribute = xmldoc.CreateAttribute(xmlnodeattribute) ;
XmlNode nodepath = xmldoc.SelectSingleNode( xmlnodepath ) ;
nodepath.Attributes.Append(nodeattribute) ;
}
#endregion
#region 刪除一個節點的屬性
// <summary>
// 刪除一個節點的屬性
// </summary>
public void DeleteAttribute( string strnodepath , string nodeattribute , string nodeattributevalue)
{
System.Xml.XmlNodeList nodepath = xmldoc.SelectSingleNode( strnodepath ).ChildNodes;
foreach(XmlNode xn in nodepath)
{
XmlElement xe=(XmlElement)xn;
if(xe.GetAttribute(nodeattribute)==nodeattributevalue)
{
xe.RemoveAttribute(nodeattribute);//刪除屬性
}
}
}
#endregion
#region 刪除一個節點
// <summary>
// 刪除一個節點
// </summary>
public void DeleteXmlNode(string tempxmlnode)
{
XmlNode xmlnodepath = xmldoc.SelectSingleNode( tempxmlnode ) ;
xmlnodepath.ParentNode.RemoveChild( xmlnodepath ) ;
}
#endregion
#region 保存xml文件
// <summary>
// 功能:
// 保存xml文件
//
// </summary>
public void SaveXmlDocument()
{
try
{
//保存設置的結果
xmldoc.Save( HttpContext.Current.Server.MapPath( xmlfilepath ) );
}
catch(XmlException xmle)
{
throw xmle;
}
}
#endregion
#region 保存xml文件
// <summary>
// 功能:
// 保存xml文件
//
// </summary>
public void SaveXmlDocument(string tempxmlfilepath)
{
try
{
//保存設置的結果
xmldoc.Save(tempxmlfilepath);
}
catch(XmlException xmle)
{
throw xmle;
}
}
#endregion
}
}