using System;
using System.Xml;
using System.Collections.Generic;
using System.Text;
namespace janyo.io
{
public class XmlUtility
{
private static string xmlfilename="";
public static string XmlFileName
{
set
{
xmlfilename=value;
}
}
private void loadXmlDoc()
{
//XmlDocument xdoc = new XmlDocument();
//xdoc.Load(xmlfilename);
}
private static string getFileName()
{
return "";
}
/// <summary>
/// 读取节点的值
/// </summary>
/// <param name="node">节点名称</param>
/// <returns></returns>
public static string getValueByNode(string node)
{
string temp ="";
XmlTextReader xrd =new XmlTextReader(xmlfilename);
while (xrd.Read())
{
if (xrd.NodeType==XmlNodeType.Element)
{
if (xrd.Name==node)
{
temp=xrd.ReadElementContentAsString();
return temp;
}
}
}
xrd.Close();
return "";
}
/// <summary>
/// 查找某个所有匹配条件的节点值
/// </summary>
/// <param name="xpath">节点xpath表达式;/siteconfig/item[@id=var]</param>
/// <returns></returns>
public static System.Collections.ArrayList getItems(string xpath)
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlfilename);
XmlNodeList xnodelist = xmldoc.SelectNodes(xpath);
System.Collections.ArrayList arr = new System.Collections.ArrayList();
if (xnodelist.Count==0)
{
return null;
}
foreach (XmlNode xnod in xnodelist)
{
arr.Add(xnod.InnerText);
}
xmldoc = null;
return arr;
}
/// <summary>
/// 读取某个节点的属性值
/// </summary>
/// <param name="node">节点名称</param>
/// <param name="attrs">属性,可以读写该节点多个属性</param>
/// <returns></returns>
public static System.Collections.ArrayList getValueByNode(string node,params string[] attrs)
{
XmlReader xrd = XmlReader.Create(xmlfilename);
while (xrd.Read())
{
if (xrd.NodeType == XmlNodeType.Element)
{
if(xrd.Name==node)
{
//string[] temp=null;
System.Collections.ArrayList arlist = new System.Collections.ArrayList();
// int i =0;
foreach (string attr in attrs)
{
arlist.Add(xrd.GetAttribute(attr));
// i++;
}
return arlist;
}
}
}
xrd.Close();
return null;
}
/// <summary>
/// 删除某个节点
/// </summary>
/// <param name="xpath">节点xpath表达式;/siteconfig/item[@id=var]</param>
public static void deletNode(string xpath)
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlfilename);
XmlNode xnod=xmldoc.SelectSingleNode(xpath);
xnod.ParentNode.RemoveChild(xnod);
xmldoc.Save(xmlfilename);
}
/// <summary>
/// 更新某个节点的值
/// </summary>
/// <param name="xpath">节点xpath表达式;/siteconfig/item[@id=var]</param>
/// <param name="value">更新值<node></node></param>
public static void updateNode(string xpath, string value)
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlfilename);
XmlNode xnod = xmldoc.SelectSingleNode(xpath);
xnod.InnerText = value;
xmldoc.Save(xmlfilename);
xmldoc = null;
}
/// <summary>
/// 批量更新节点屬性的值
/// </summary>
/// <param name="xpath">节点xpath表达式;/siteconfig/item[@id=var]</param>
/// <param name="attrs">屬性名稱值對<node></node></param>
public static void updateNode(string xpath, string[] attrs)
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlfilename);
XmlNodeList xnodlist = xmldoc.SelectNodes(xpath);
foreach (XmlNode xnod in xnodlist)
{
xnod.Attributes[attrs[0]].Value=attrs[1];
}
// xnod.InnerText = value;
xmldoc.Save(xmlfilename);
xmldoc = null;
}
/// <summary>
/// 在指定节点插入子节点
/// </summary>
/// <param name="xpath">节点xpath表达式;/siteconfig/item[@id=var]</param>
/// <param name="value">节点值<node></node></param>
/// <param name="cNode">待插入的节点</param>
public static void insertNode(string xpath, string cNode,string value,params string[] attrs)
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlfilename);
XmlNode xnod = xmldoc.SelectSingleNode(xpath);
XmlElement xn = xmldoc.CreateElement(cNode);
int attrsLength = attrs.GetUpperBound(0)+1;
if (attrsLength%2!=0)
{
throw new Exception("屬性名稱值對不相等");
}
for (int i = 0; i <attrs.GetUpperBound(0)+1; i++)
{
xn.SetAttribute(attrs[i], attrs[i+1]);
i++;
}
xnod.AppendChild(xn);
xnod.LastChild.InnerText=value;
xmldoc.Save(xmlfilename);
xmldoc = null;
}
}
}