using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Data;
using System.IO;
namespace text
{
public class XmlHelper
{
#region 增
/// <summary>
/// 新建一個帶有根節點的xml
/// </summary>
/// <param name="rootName">根節點名字</param>
/// <returns></returns>
public static XmlDocument CreateXml(string rootName)
{
XmlDocument xml = new XmlDocument();
//寫入聲明
XmlNode node = xml.CreateNode(XmlNodeType.XmlDeclaration, "", "");
xml.AppendChild(node);
//增加根節點
XmlElement rootElement = xml.CreateElement(rootName);
xml.AppendChild(rootElement);
return xml;
}
/// <summary>
/// 添加一個父節點到根節點末尾
/// </summary>
/// <param name="xml">xml文檔</param>
/// <param name="parentNodeName">父節點名字</param>
/// <returns></returns>
public static void AddParentNode(XmlDocument xml, string parentNodeName)
{
XmlElement parentElement = xml.CreateElement(parentNodeName);
xml.DocumentElement.AppendChild(parentElement);
}
/// <summary>
/// 添加一個新的子節點(包括屬性信息)到指定的節點中
/// </summary>
/// <param name="xml">xml文檔</param>
/// <param name="currentPath">新節點的父節點xPath路徑</param>
/// <param name="elementName">新節點的名字</param>
/// <param name="attrib">新節點的屬性名字</param>
/// <param name="attribContent">新節點的屬性值</param>
/// <param name="content">新節點值</param>
/// <returns></returns>
public static bool AddElement(XmlDocument xml, string currentNodePath, string elementName
, string attrib, string attribContent, string content)
{
bool flag = false;
XmlNode currentNode = xml.SelectSingleNode(currentNodePath);
if (currentNode != null)
{
XmlElement newElement = xml.CreateElement(elementName);
newElement.SetAttribute(attrib, attribContent);
newElement.InnerText = content;
currentNode.AppendChild(newElement);
flag = true;
}
return flag;
}
/// <summary>
/// 添加一個新的子節點(不包括屬性信息)到指定的節點中
/// </summary>
/// <param name="xml">xml文檔</param>
/// <param name="currentNodePath">新節點的父節點xPath路徑</param>
/// <param name="elementName">新節點名字</param>
/// <param name="content">新節點值</param>
/// <returns></returns>
public static bool AddElement(XmlDocument xml, string currentNodePath, string elementName
, string content)
{
bool flag = false;
XmlNode currentNode = xml.SelectSingleNode(currentNodePath);
if (currentNode != null)
{
XmlElement newElement = xml.CreateElement(elementName);
newElement.InnerText = content;
currentNode.AppendChild(newElement);
flag = true;
}
return flag;
}
/// <summary>
/// 向某一節點添加屬性
/// </summary>
/// <param name="xml">xml文檔</param>
/// <param name="currentNodePath">屬性的節點的xPath</param>
/// <param name="attributeName">屬性名</param>
/// <param name="attributeValue">屬性值</param>
/// <returns></returns>
public static bool AddAttribute(XmlDocument xml, string currentNodePath, string attributeName
, string attributeValue)
{
bool flag = false;
XmlNode currentNode = xml.SelectSingleNode(currentNodePath);
if (currentNodePath != null)
{
XmlAttribute attribute = xml.CreateAttribute(attributeName); //創建一個新屬性
currentNode.Attributes.Append(attribute);
XmlElement currentElement = currentNode as XmlElement;
currentElement.SetAttribute(attributeName, attributeValue);
flag = true;
}
return flag;
}
#endregion
#region 查
/// <summary>
/// 查找指定節點名的節點列表
/// </summary>
/// <param name="xml">xml文檔</param>
/// <param name="nodeName">節點名稱</param>
/// <returns>符合要求的節點列表</returns>
public static XmlNodeList QueryNodeList(XmlDocument xml, string nodeName)
{
XmlNodeList nodeList = xml.GetElementsByTagName(nodeName);
if (nodeList.Count != 0)
{
return nodeList;
}
return null;
}
/// <summary>
/// 查找指定節點的指定屬性值
/// </summary>
/// <param name="xml">xml文檔</param>
/// <param name="nodePath">節點的xPath路徑,必須是獨一無二的。如果有多個則只返回第一個</param>
/// <param name="attributeName">要查詢的屬性</param>
/// <returns></returns>
public static string QueryAttribute(XmlDocument xml, string nodePath, string attributeName)
{
string res = null;
XmlNode currentNode = xml.SelectSingleNode(nodePath);
if (currentNode != null)
{
XmlAttributeCollection xac = currentNode.Attributes; //當前節點的屬性集合
for (int i = 0; i < xac.Count; i++)
{
if (xac[i].Name == attributeName)
{
res = xac[i].Value;
break;
}
}
}
return res;
}
/// <summary>
/// 查找指定節點的值
/// </summary>
/// <param name="xml">xml文檔</param>
/// <param name="nodepath">節點的xPath路徑,必須是獨一無二的。如果有多個則只返回第一個</param>
/// <returns></returns>
public static string QueryNode(XmlDocument xml, string nodepath)
{
string res = null;
XmlNode currentNode = xml.SelectSingleNode(nodepath);
if (currentNode != null)
{
res = currentNode.InnerText;
}
return res;
}
#endregion
#region 存
public static void Save(XmlDocument xml, string path)
{
xml.Save(path);
}
#endregion
}
}