一个处理xml的类(可借鉴)
2008-07-22 11:56:40| 分类:
xml
| 标签:
|举报
|字号大中小 订阅
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Data;
using System.IO;
namespace TestWinApp
{
/// <summary>
/// 这个类有借鉴价值,有空来加强加强
/// </summary>
public class XmlControl
{
/// <summary>
/// 要处理的xml的路径
/// </summary>
protected string strXmlFile;
protected XmlDocument objXmlDoc = new XmlDocument();
public XmlControl(string xmlFile)
{
try { objXmlDoc.Load(xmlFile); }
catch (System.Exception ex)
{
throw ex;
}
strXmlFile = xmlFile;
}
/// <summary>
/// 将指定xpath所查到的内容放入DataView中
/// </summary>
/// <param name="xmlPathNode"></param>
/// <returns></returns>
public DataView GetData(string xmlPathNode)
{
DataSet ds = new DataSet();
StringReader read = new StringReader(objXmlDoc.SelectSingleNode(xmlPathNode).OuterXml);
//string test = objXmlDoc.SelectSingleNode(xmlPathNode).OuterXml;
ds.ReadXml(read);
return ds.Tables[0].DefaultView;
}
/// <summary>
/// 将指定xpath查出来的节点的InnerText,指定的attribute放入DataTable。
/// 这个函数需要改一下。
/// </summary>
/// <param name="xmlPathNode"></param>
/// <param name="attrib"></param>
/// <returns></returns>
public DataTable GetData(string xmlPathNode, string attrib)
{
DataTable dt = new DataTable();
dt.Columns.Add("NodeName", typeof(string));
dt.Columns.Add(attrib, typeof(string));
XmlNodeList xnList = objXmlDoc.SelectNodes(xmlPathNode);
foreach (XmlNode xn in xnList)
{
if (xn.Attributes[attrib] != null)
{
DataRow dr = dt.NewRow();
dr[0] = xn.InnerText;
dr[1] = xn.Attributes[attrib].Value;
dt.Rows.Add(dr);
}
}
return dt;
}
/// <summary>
/// 将指定xpath的节点用指定内容替换。当然是替换InnerText。
/// </summary>
/// <param name="xmlPathNode"></param>
/// <param name="content"></param>
public void Replace(string xmlPathNode, string content)
{
objXmlDoc.SelectSingleNode(xmlPathNode).InnerText = content;
}
/// <summary>
/// 删除指定节点
/// </summary>
/// <param name="node"></param>
public void Delete(string node)
{
string mainNode = node.Substring(0, node.LastIndexOf("/"));
objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(node));
}
/// <summary>
/// 插入节点,在mainNode下创建childNode,然后为childNode创建子节点element,
/// element的InnerText为content
/// </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);
}
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);
}
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>
/// 读取指定节点的某属性值
/// </summary>
/// <param name="xpath"></param>
/// <param name="attr"></param>
/// <returns></returns>
public string getAttr(string xpath, string attr)
{
XmlNode node = objXmlDoc.SelectSingleNode(xpath);
return node.Attributes[attr].Value;
}
/// <summary>
/// 写指定节点的某属性
/// </summary>
/// <param name="xpath"></param>
/// <param name="attr"></param>
/// <param name="value"></param>
public void setAttr(string xpath, string attr, string value)
{
XmlNode node = objXmlDoc.SelectSingleNode(xpath);
node.Attributes[attr].Value = value;
Save();
}
/// <summary>
/// 查到的所有节点的InnerText的数组
/// </summary>
/// <param name="xmlPathNode"></param>
/// <returns></returns>
public string[] GetNodeList(string xmlPathNode)
{
XmlNodeList xnList = objXmlDoc.SelectNodes(xmlPathNode);
string[] strArr = new string[xnList.Count];
for (int i = 0; i < xnList.Count; i++)
{
strArr[i] = xnList[i].InnerText;
}
return strArr;
}
/// <summary>
/// 满足xpath且某属性的值为指定的值的节点的InnerText
/// </summary>
/// <param name="xmlPathNode"></param>
/// <param name="attrib"></param>
/// <param name="attribContent"></param>
/// <returns></returns>
public string GetNodeStr(string xmlPathNode, string attrib, string attribContent)
{
string xnStr = "";
XmlNodeList xnList = objXmlDoc.SelectNodes(xmlPathNode);
foreach (XmlNode xn in xnList)
{
if (xn.Attributes[attrib] != null)
{
if (xn.Attributes[attrib].Value == attribContent)
{
xnStr = xn.InnerText;
break;
}
}
}
return xnStr;
}
/// <summary>
/// 保存修改
/// </summary>
public void Save()
{
try
{
objXmlDoc.Save(strXmlFile);
}
catch (System.Exception ex)
{
throw ex;
}
objXmlDoc = null;
}
}
}
评论这张
转发至微博
转发至微博
评论