.net xml常用操作方法

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
 }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章