.net xml操作基类

来源:互联网 发布:启动和关闭mysql 编辑:程序博客网 时间:2024/05/01 05:37

using System;
using System.Xml;

namespace XmlHelper
{
 /// <summary>
 /// xml 的摘要说明。
 /// </summary>
 public class XmlHandler
 {
  protected XmlDocument xdoc=new XmlDocument();
  public XmlElement root;
  public XmlHandler()
  {
   
  }

  public void LoadXml(string xml)
  {
   xdoc.LoadXml(xml);
   root=(XmlElement)xdoc.FirstChild;
  }

  //取得名称为name的结点的值
  public string GetValue(string name)
  {
   XmlNode xn=FindXnByName(root.ChildNodes,name);
   if(xn==null)return null;
   return xn.InnerText;
  }

  //创建一个包含version和指定根节点的XmlDocument
  public void CreateRoot(string rootName)
  {
   XmlElement xe=xdoc.CreateElement(rootName);
   xdoc.AppendChild(xe);
   root=xe;
  }
  
  //增加一个子结点
  public XmlElement AppendChild(string name,string _value)
  {
   return AddChild((XmlElement)root,name,_value);
  }
  
  public override string ToString()
  {
   return xdoc.OuterXml;
  }

  //为一个XmlElement添加子节点,并返回添加的子节点引用
  public XmlElement AddChild(XmlElement xe,string sField,string sValue)
  {
   XmlElement xeTemp=xdoc.CreateElement(sField);
   xeTemp.InnerText=sValue;
   xe.AppendChild(xeTemp);
   return xeTemp;
  }

  //为一个XmlElement添加子节点,并返回添加的子节点引用
  protected XmlElement AddChild(XmlElement xe,XmlDocument xd,string sField)
  {
   XmlElement xeTemp=xd.CreateElement(sField);
   xe.AppendChild(xeTemp);
   return xeTemp;
  }

  //为一个节点添加属性
  public void AddAttribute(XmlElement xe,string strName,string strValue)
  {
   //判断属性是否存在
   string s=GetXaValue(xe.Attributes,strName);
   //属性已经存在
   if(s!=null)
   {
    throw new System.Exception("attribute exists");
   }
   XmlAttribute xa=xdoc.CreateAttribute(strName);
   xa.Value=strValue;
   xe.Attributes.Append(xa);
  }

  //为一个节点添加属性,不是系统表
  protected void AddAttribute(XmlDocument xdoc,XmlElement xe,string strName,string strValue)
  {
   //判断属性是否存在
   string s=GetXaValue(xe.Attributes,strName);
   //属性已经存在
   if(s!=null)
   {
    throw new Exception("Error:The attribute '"+strName+"' has been existed!");
   }
   XmlAttribute xa=xdoc.CreateAttribute(strName);
   xa.Value=strValue;
   xe.Attributes.Append(xa);
  }

  //通过节点名称找到指定的节点
  protected XmlNode FindXnByName(XmlNodeList xnl,string strName)
  {
   for(int i=0;i<xnl.Count;i++)
   {
    if(xnl.Item(i).LocalName==strName)return xnl.Item(i);
   }
   return null;
  }

  //找到指定名称属性的值
  protected string GetXaValue(XmlAttributeCollection xac,string strName)
  {
   for(int i=0;i<xac.Count;i++)
   {
    if(xac.Item(i).LocalName==strName)return xac.Item(i).Value ;
   }
   return null;
  }

  //找到指定名称属性的值
  protected string GetXnValue(XmlNodeList xnl,string strName)
  {
   for(int i=0;i<xnl.Count;i++)
   {
    if(xnl.Item(i).LocalName==strName)return xnl.Item(i).InnerText;
   }
   return null;
  }

  //为一个节点指定值
  protected void SetXnValue(XmlNodeList xnl,string strName,string strValue)
  {
   for(int i=0;i<xnl.Count;i++)
   {
    if(xnl.Item(i).LocalName==strName)
    {
     xnl.Item(i).InnerText=strValue;
     return;
    }
   }
   return;
  }

  //为一个属性指定值
  protected void SetXaValue(XmlAttributeCollection xac,string strName,string strValue)
  {
   for(int i=0;i<xac.Count;i++)
   {
    if(xac.Item(i).LocalName==strName)
    {
     xac.Item(i).Value=strValue;
     return;
    }
   }
   return;
  }


  //寻找具有指定名称和属性/值组合的节点
  protected XmlNode FindXnByXa(XmlNodeList xnl,string strXaName,string strXaValue)
  {
   string xa;
   for(int i=0;i<xnl.Count;i++)
   {
    xa=GetXaValue(xnl.Item(i).Attributes,strXaName);
    if(xa!=null)
    {
     if(xa==strXaValue)return xnl.Item(i);
    }
   }
   return null;
  }
 }
}

原创粉丝点击