登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

涤心斋

淡泊以明志,宁静以致远!

 
 
 

日志

 
 

一个处理xml的类(可借鉴)  

2008-07-22 11:56:40|  分类: xml |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
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;
        }

    }
}

  评论这张
 
阅读(773)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018