C#常用操作类库三(XML操作类)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#常用操作类库三(XML操作类)相关的知识,希望对你有一定的参考价值。

/// <summary>
/// XmlHelper 的摘要说明。
/// xml操作类
/// </summary>
public class XmlHelper
{
  protected string strXmlFile;
  protected XmlDocument objXmlDoc = new XmlDocument();

public XmlHelper(string XmlFile)
{
  // 
  // TODO: 在这里加入建构函式的程序代码 
  // 
  try
  {

    objXmlDoc.Load(XmlFile);
  }
  catch (System.Exception ex)
  {
    throw ex;
  }
    strXmlFile = XmlFile;
}

public DataTable GetData(string XmlPathNode)
{
  //查找数据。返回一个DataView 
  DataSet ds = new DataSet();
  StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
  ds.ReadXml(read);
  return ds.Tables[0];
}
/// <summary>
/// 新节点内容。
/// 示例:xmlTool.Replace("Book/Authors[ISBN=\"0002\"]/Content","ppppppp"); 
/// </summary>
/// <param name="XmlPathNode"></param>
/// <param name="Content"></param>
public void Replace(string XmlPathNode, string Content)
{
//更新节点内容。 
  objXmlDoc.SelectSingleNode(XmlPathNode).InnerText = Content;
}

/// <summary>
/// 删除一个指定节点的子节点。 
/// 示例: xmlTool.DeleteChild("Book/Authors[ISBN=\"0003\"]"); 
/// </summary>
/// <param name="Node"></param>
public void DeleteChild(string Node)
{
//删除一个节点。 
  string mainNode = Node.Substring(0, Node.LastIndexOf("/"));
  objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node));
}

 

/// <summary>

/// * 使用示列:
/// 示例: XmlHelper.Delete( "/Node", "")
/// XmlHelper.Delete( "/Node", "Attribute")
/// </summary>
/// <param name="node">节点</param>
/// <param name="attribute">属性名,非空时删除该节点属性值,否则删除节点值</param>
public void Delete( string node, string attribute)
{
  try
  {

    XmlNode xn = objXmlDoc.SelectSingleNode(node);
    XmlElement xe = (XmlElement)xn;
    if (attribute.Equals(""))
    xn.ParentNode.RemoveChild(xn);
    else
    xe.RemoveAttribute(attribute);

  }
  catch { }
}
/// <summary>
/// 插入一节点和此节点的一子节点。 
/// 示例:xmlTool.InsertNode("Book","Author","ISBN","0004"); 
/// </summary>
/// <param name="MainNode">主节点</param>
/// <param name="ChildNode">子节点</param>
/// <param name="Element">元素</param>
/// <param name="Content">内容</param>
public void InsertNode(string MainNode, string ChildNode, string Element, string Content)
{
//插入一节点和此节点的一子节点。 
XmlNode objRootNode = objXmlDoc.SelectSingleNode(MainNode);
XmlElement objChildNode = objXmlDoc.CreateElement(ChildNode);
objRootNode.AppendChild(objChildNode);
XmlElement objElement = objXmlDoc.CreateElement(Element);
objElement.InnerText = Content;
objChildNode.AppendChild(objElement);
}

/// <summary>
/// 插入一个节点,带一属性。
/// 示例: xmlTool.InsertElement("Book/Author[ISBN=\"0004\"]","Title","Sex","man","iiiiiiii"); 
/// </summary>
/// <param name="MainNode">主节点</param>
/// <param name="Element">元素</param>
/// <param name="Attrib">属性</param>
/// <param name="AttribContent">属性内容</param>
/// <param name="Content">元素内容</param>
public void InsertElement(string MainNode, string Element, string Attrib, string AttribContent, string Content)
{
//插入一个节点,带一属性。 
XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
XmlElement objElement = objXmlDoc.CreateElement(Element);
objElement.SetAttribute(Attrib, AttribContent);
objElement.InnerText = Content;
objNode.AppendChild(objElement);
}
/// <summary>
/// 插入一个节点,不带属性。
/// 示例:xmlTool.InsertElement("Book/Author[ISBN=\"0004\"]","Content","aaaaaaaaa"); 
/// </summary>
/// <param name="MainNode">主节点</param>
/// <param name="Element">元素</param>
/// <param name="Content">元素内容</param>
public void InsertElement(string MainNode, string Element, string Content)
{
//插入一个节点,不带属性。 
XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
XmlElement objElement = objXmlDoc.CreateElement(Element);
objElement.InnerText = Content;
objNode.AppendChild(objElement);
}

/// <summary>
/// 对xml文件做插入,更新,删除后需做Save()操作,以保存修改
/// </summary>
public void Save()
{
//保存文檔。 
try
{
objXmlDoc.Save(strXmlFile);
}
catch (System.Exception ex)
{
throw ex;
}
objXmlDoc = null;
}
}

//=========================================================

//实例应用:

//string strXmlFile = Server.MapPath("TestXml.xml"); 
//XmlControl xmlTool = new XmlControl(strXmlFile);

// 数据显视 
// dgList.DataSource = xmlTool.GetData("Book/Authors[ISBN=\"0002\"]"); 
// dgList.DataBind();

// 更新元素内容 
// xmlTool.Replace("Book/Authors[ISBN=\"0002\"]/Content","ppppppp"); 
// xmlTool.Save();

// 添加一个新节点 
// xmlTool.InsertNode("Book","Author","ISBN","0004"); 
// xmlTool.InsertElement("Book/Author[ISBN=\"0004\"]","Content","aaaaaaaaa"); 
// xmlTool.InsertElement("Book/Author[ISBN=\"0004\"]","Title","Sex","man","iiiiiiii"); 
// xmlTool.Save();

// 删除一个指定节点的所有内容和属性 
// xmlTool.Delete("Book/Author[ISBN=\"0004\"]"); 
// xmlTool.Save();

// 删除一个指定节点的子节点 
// xmlTool.Delete("Book/Authors[ISBN=\"0003\"]"); 
// xmlTool.Save();

 

以上是关于C#常用操作类库三(XML操作类)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 使用自己的类库三种方式

C#程序员经常用到的10个实用代码片段 - 操作系统

C#操作HttpClient工具类库

c# 配置文件App.config操作类库

常用操作类库(验证类)

Java常用类库之时间操作类——DateCalendarDateFormatSimpleDateFormat及实例操作