`
灵雨飘零
  • 浏览: 35062 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
文章分类
社区版块
存档分类
最新评论

一直用在项目里操作XML的类

 
阅读更多

一直用在项目里操作XML的类 NewXmlControl.cs

using System;
using System.Xml;
using System.Configuration;
using System.Data;
using System.Collections;
using System.IO;

namespace YZControl
{
    public class NewXmlControl : Object
    {
        protected string strXmlFile;
        protected XmlDocument objXmlDoc = new XmlDocument();


        public NewXmlControl(string XmlFile, Boolean bOverWrite, string sRoot)
        {
            try
            {
                //如果覆盖模式,则强行创建一个xml文档
                if (bOverWrite)
                {
                    objXmlDoc.AppendChild(objXmlDoc.CreateXmlDeclaration("1.0", "utf-8", null));//设置xml的版本,格式信息
                    objXmlDoc.AppendChild(objXmlDoc.CreateElement("", sRoot, ""));//创建根元素
                    objXmlDoc.Save(XmlFile);//保存
                }
                else //否则,检查文件是否存在,不存在则创建
                {
                    if (!(File.Exists(XmlFile)))
                    {
                        objXmlDoc.AppendChild(objXmlDoc.CreateXmlDeclaration("1.0", "utf-8", null));
                        objXmlDoc.AppendChild(objXmlDoc.CreateElement("", sRoot, ""));
                        objXmlDoc.Save(XmlFile);
                    }
                }
                objXmlDoc.Load(XmlFile);
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            strXmlFile = XmlFile;
        }



        /// <summary>
        /// 根据xPath值,返回xPath下的所有下级子结节到一个DataView
        /// </summary>
        /// <param name="XmlPathNode">xPath值</param>
        /// <returns>有数据则返回DataView,否则返回null</returns>
        public DataView GetData(string XmlPathNode)
        {
            //查找数据。返回一个DataView
            DataSet ds = new DataSet();
            try
            {
                StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
                ds.ReadXml(read);
                return ds.Tables[0].DefaultView;
            }
            catch
            {
                //throw;
                return null;
            }
        }

        /// <summary>
        /// 更新节点内容
        /// </summary>
        /// <param name="xmlPathNode"></param>
        /// <param name="content"></param>
        public void UpdateNode(string xmlPathNode, string content)
        {
            objXmlDoc.SelectSingleNode(xmlPathNode).InnerText = content;
        }

        /// <summary>
        /// 更新节点的某个属性
        /// </summary>
        /// <param name="xmlPathNode">要操作的节点</param>
        /// <param name="AttribName">属性名</param>
        /// <param name="AttribValue">属性值</param>
        public void UpdateNode(string xmlPathNode, string AttribName, string AttribValue)
        {

            ((XmlElement)(objXmlDoc.SelectSingleNode(xmlPathNode))).SetAttribute(AttribName, AttribValue);
        }


        /// <summary>
        /// 修改节点(同步更新内容和属性)
        /// </summary>
        /// <param name="xmlPathNode">要操作节点的xpath语句</param>
        /// <param name="arrAttribName">属性名称字符串数组</param>
        /// <param name="arrAttribContent">属性内容字符串数组</param>
        /// <param name="content">节点内容</param>
        public void UpdateNode(string xmlPathNode, string[] arrAttribName, string[] arrAttribContent, string content)
        {

            XmlNode xn = objXmlDoc.SelectSingleNode(xmlPathNode);
            if (xn != null)
            {
                xn.InnerText = content;
                xn.Attributes.RemoveAll();
                for (int i = 0; i <= arrAttribName.GetUpperBound(0); i++)
                {
                    ((XmlElement)(xn)).SetAttribute(arrAttribName[i], arrAttribContent[i]);
                }

            }
        }

        /// <summary>
        /// 移除选定节点集的所有属性
        /// </summary>
        /// <param name="xmlPathNode"></param>
        public void RemoveAllAttribute(string xmlPathNode)
        {
            XmlNodeList xnl = objXmlDoc.SelectNodes(xmlPathNode);
            foreach (XmlNode xn in xnl)
            {
                xn.Attributes.RemoveAll();
            }
        }


        public void DeleteNode(string Node)
        {
            //刪除一个节点。
            try
            {
                string mainNode = Node.Substring(0, Node.LastIndexOf("/"));
                objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node));
            }
            catch
            {
                //throw;   
                return;
            }
        }


        public void InsertNodeWithChild(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>
        /// 插入一个节点,带一个Attribute和innerText
        /// </summary>
        /// <param name="mainNode"></param>
        /// <param name="Element">节点名称</param>
        /// <param name="Attrib">Attribute名称</param>
        /// <param name="AttribContent">Attribute值</param>
        /// <param name="Content">innerText值</param>
        public void InsertNode(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>
        /// 插入一个节点,带一个Attribute
        /// </summary>
        /// <param name="mainNode"></param>
        /// <param name="Element">节点名称</param>
        /// <param name="Attrib">Attribute名称</param>
        /// <param name="AttribContent">Attribute值</param>   
        public void InsertNode(string mainNode, string Element, string Attrib, string AttribContent)
        {
            XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
            XmlElement objElement = objXmlDoc.CreateElement(Element);
            objElement.SetAttribute(Attrib, AttribContent);
            objNode.AppendChild(objElement);
        }


        /// <summary>
        /// 插入一个节点
        /// </summary>
        /// <param name="mainNode"></param>
        /// <param name="Element">节点名称</param>       
        public void InsertNode(string mainNode, string Element)
        {
            XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
            XmlElement objElement = objXmlDoc.CreateElement(Element);
            objNode.AppendChild(objElement);
        }


        //<summary>
        //插入一个节点,带多个属性和一个inner text
        //</summary>
        public void InsertNode(string mainNode, string elementName, string[] arrAttributeName, string[] arrAttributeContent, string elementContent)
        {
            try
            {
                XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
                XmlElement objElement = objXmlDoc.CreateElement(elementName);
                for (int i = 0; i <= arrAttributeName.GetUpperBound(0); i++)
                {
                    objElement.SetAttribute(arrAttributeName[i], arrAttributeContent[i]);
                }
                objElement.InnerText = elementContent;
                objNode.AppendChild(objElement);
            }
            catch
            {
                throw;
                //string t = mainNode;
                //;
            }
        }

        ///<summary>
        ///插入一个节点,带多个属性
        ///</summary>
        public void InsertNode(string mainNode, string elementName, string[] arrAttributeName, string[] arrAttributeContent)
        {
            try
            {
                XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
                XmlElement objElement = objXmlDoc.CreateElement(elementName);
                for (int i = 0; i <= arrAttributeName.GetUpperBound(0); i++)
                {
                    objElement.SetAttribute(arrAttributeName[i], arrAttributeContent[i]);
                }
                //objElement.InnerText = elementContent;
                objNode.AppendChild(objElement);
            }
            catch
            {
                throw;
                //string t = mainNode;
                //;
            }
        }

        /// <summary>
        /// 插入子节点(带多个属性)
        /// </summary>
        /// <param name="parentNode">要插入的父节点</param>
        /// <param name="elementName">插入的节点名称</param>
        /// <param name="arrAttributeName">属性名称[数组]</param>
        /// <param name="arrAttributeContent">属性内容[数组]</param>
        /// <param name="elementContent">节点内容</param>
        public void AddChildNode(string parentNodePath, string elementName, string[] arrAttributeName, string[] arrAttributeContent, string elementContent)
        {
            try
            {
                XmlNode parentNode = objXmlDoc.SelectSingleNode(parentNodePath);
                XmlElement objChildElement = objXmlDoc.CreateElement(elementName);
                for (int i = 0; i <= arrAttributeName.GetUpperBound(0); i++)
                {
                    objChildElement.SetAttribute(arrAttributeName[i], arrAttributeContent[i]);
                }
                objChildElement.InnerText = elementContent;
                parentNode.AppendChild(objChildElement);
            }
            catch
            {
                return;
            }

        }

        /// <summary>
        /// 插入子节点(将内容以CData形式写入)
        /// </summary>
        /// <param name="parentNode">要插入的父节点</param>
        /// <param name="elementName">插入的节点名称</param>
        /// <param name="elementContent">节点内容</param>
        public void AddChildNodeCData(string parentNodePath, string elementName, string elementContent)
        {
            try
            {
                XmlNode parentNode = objXmlDoc.SelectSingleNode(parentNodePath);
                XmlElement objChildElement = objXmlDoc.CreateElement(elementName);

                //写入cData数据
                XmlCDataSection xcds = objXmlDoc.CreateCDataSection(elementContent);

                objChildElement.AppendChild(xcds);
                parentNode.AppendChild(objChildElement);
            }
            catch
            {
                return;
            }

        }


        /// <summary>
        /// 插入子节点(仅内容,不带属性)
        /// </summary>
        /// <param name="parentNode">要插入的父节点</param>
        /// <param name="elementName">插入的节点名称</param>
        /// <param name="elementContent">节点内容</param>
        public void AddChildNode(string parentNodePath, string elementName, string elementContent)
        {
            try
            {
                XmlNode parentNode = objXmlDoc.SelectSingleNode(parentNodePath);
                XmlElement objChildElement = objXmlDoc.CreateElement(elementName);

                objChildElement.InnerText = elementContent;
                parentNode.AppendChild(objChildElement);
            }
            catch
            {
                return;
            }

        }

        /// <summary>
        /// 根据xpath值查找节点
        /// </summary>
        /// <param name="NodePath">要查找节点的xpath值</param>
        /// <returns>找到返回true,否则返回true</returns>
        public bool FindNode(string NodePath)
        {
            try
            {
                if (objXmlDoc.SelectSingleNode(NodePath) != null)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }


        /// <summary>
        ///保存文档
        /// </summary>
        public void Save()
        {
            //保存文档。
            try
            {
                objXmlDoc.Save(strXmlFile);
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            objXmlDoc = null;
        }




    }
}

调用方法
 NewXmlControl xc = new NewXmlControl(Server.MapPath("~/rss.xml"), true, "rss");
            xc.UpdateNode("//rss", "version", "2.0");
            xc.InsertNode("//rss", "channel");
            xc.AddChildNode("/rss/channel", "title", Shop.DAL.sp_netconfig.GetConfigObj().webname);
           // xc.AddChildNode("/rss/channel", "slogan", Shop.DAL.sp_netconfig.GetConfigObj().webname);
            xc.AddChildNode("/rss/channel", "link", Shop.DAL.sp_netconfig.GetConfigObj().weburl);
            xc.AddChildNode("/rss/channel", "language", "zh-cn");
            xc.AddChildNode("/rss/channel", "description", Shop.DAL.sp_netconfig.GetConfigObj().metatwo);
           // xc.AddChildNode("/rss/channel", "copyright", Shop.DAL.sp_netconfig.GetConfigObj().copyright);
            xc.AddChildNode("/rss/channel", "author", Shop.DAL.sp_netconfig.GetConfigObj().webname);
            xc.AddChildNode("/rss/channel", "generator", "Rss Generator By Taoxian");
            DataSet ds = DbHelperSQL.Query("select top 20 pro_ID,pro_Name,pro_CreateTime,pro_Content from sp_product where pro_SaleType=1 and  pro_Stock>0 and pro_Audit=1 order by pro_ID desc");
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                int j = i + 1;
                xc.InsertNode("/rss/channel", "item");
                xc.AddChildNode("/rss/channel/item[" + j.ToString() + "]", "title", ds.Tables[0].Rows[i]["pro_Name"].ToString());
                xc.AddChildNode("/rss/channel/item[" + j.ToString() + "]", "link", Shop.DAL.sp_netconfig.GetConfigObj().weburl + "/Product/ProductInfo_" + ds.Tables[0].Rows[i]["pro_ID"].ToString() + ".html");
                xc.AddChildNode("/rss/channel/item[" + j.ToString() + "]", "pubDate", Convert.ToDateTime(ds.Tables[0].Rows[i]["pro_CreateTime"].ToString()).GetDateTimeFormats('r')[0].ToString());                
                xc.AddChildNode("/rss/channel/item[" + j.ToString() + "]", "author", Shop.DAL.sp_netconfig.GetConfigObj().webname);
                xc.AddChildNodeCData("/rss/channel/item[" + j.ToString() + "]", "description", ds.Tables[0].Rows[i]["pro_Content"].ToString());
            }
            ds.Dispose();
            xc.Save();
            YZControl.staticFunction.FinalMessage("生成RSS成功!", "html.aspx", 0, 2); 

分享到:
评论

相关推荐

    Tinyxml 源代码(VC6 & VS2005)

    从流中读取XML使其可用于网络传输。通过些小技巧,它知道当XML文档读取完毕时,流后面的就一定是其它数据了。TinyXML总假定当它读取到根结点后XML数据就结束了。换句话说,那些具有不止一个根元素的文档是无法被正确...

    tinyxml_2_6_1.zip

    1. **解析XML文档**:TinyXML能读取XML文件并将其转换为内存中的DOM(Document Object Model)表示。DOM是一种树状结构,其中每个节点代表XML文档的一个部分,如元素、属性、文本等。 2. **创建和修改XML**:Tiny...

    Flash+XML超炫5屏焦点图,超级炫彩效果,惊爆你的眼球

    3. **整合HTML与Flash**:在HTML文件中插入Flash对象,设置其参数,确保Flash能正确读取XML文件并显示内容。 4. **测试与优化**:在各种浏览器和设备上测试焦点图的显示效果,对性能和兼容性进行优化。 这种技术...

    精美flash+xml图片展示程序

    2. 数据加载器:负责读取XML文件中的图片数据,通常是使用Flash的XML类XMLLoader。 3. 动画控制器:控制图片的切换,包括切换速度、过渡效果等,这部分可能需要用到时间轴控制或者ActionScript的计时器类。 4. 用户...

    超酷的3d图片墙flash+xml效果

    通过Flash读取XML文件,可以轻松地管理和更新图片墙的内容,无需修改代码,只需修改XML文件即可实现内容的增删改查,大大提高了灵活性和可维护性。 3D墙效果的实现通常涉及到三维坐标系统、矩阵运算和透视变换。在...

    PLCopen adds independent XML Schemes to IEC 61131-3

    ### PLCopen 在 IEC 61131-3 中添加独立的 XML 架构 #### 背景介绍 在工业控制编程领域,标准化一直是一个重要的议题。它旨在简化编程流程、提升软件的互操作性和可移植性,并降低整体成本。其中,IEC 61131-3 是...

    aspose 文件转化 excel-word-ppt 含 lisence.xml

    Aspose 是一个强大的文件处理工具集,主要用于在Java、.NET、Android等平台进行文档转换、创建、编辑和渲染。这个压缩包包含了Aspose库的特定版本,用于处理Excel、Word和PowerPoint文件,以及一个名为`lisence.xml`...

    xml-gallery-v.10.rar_flashden

    在Web开发领域,Flashden一直是高质量Flash资源的热门平台,其中XML画廊是设计师和开发者们常用的一种展示图片和媒体内容的方式。本篇文章将深入探讨“Flashden powerful dynamic xml gallery v.10”这一组件,它是...

    Flash+xml做的图片3D墙源码[齿轮型].rar

    在这个案例中,XML文件可能包含了图片的URL、位置信息、旋转角度等,这些数据在Flash中被读取并用于构建3D墙的每一层元素。通过这种方式,开发者可以轻松地修改或增加图片,只需更新XML文件,而无需改动Flash代码。 ...

    java各种工具类-非常齐全

    在Java中,工具类通常是封装了常见操作的静态方法集合,便于开发者在不同项目中复用。本资源包含了一系列全面的Java工具类,涵盖了多个核心领域,如日期处理、字符串操作、文件管理、XML和JSON解析以及HTTP请求等。 ...

    recompose:recompose是使用Jetpack Compose将XML中的Android布局转换为Kotlin代码的工具

    在Android开发中,XML布局文件一直以来都是构建用户界面的主要方式。然而,XML布局有其局限性,比如代码和视图分离导致的调试困难,以及无法充分利用Kotlin的高级特性和语法糖。Jetpack Compose通过引入声明式编程,...

    Android技术知识点:如何使用视图绑定来消除findViewById()

    然后同步项目,并在布局文件中观察到,每个XML布局都会自动生成对应的绑定类,例如,对于一个名为activity_main.xml的布局,生成的类名为`ActivityMainBinding`。 **使用视图绑定** 1. **创建绑定实例** 在需要...

    Android项目源码支持android5.0的通讯录项目

    在移动设备上,通讯录作为用户日常使用的重要功能之一,其开发与优化一直是Android应用开发者关注的重点。本项目源码针对Android 5.0(Lollipop)系统,提供了一个完整的通讯录应用实现,涵盖了联系人管理的基本操作...

    android QQ 2012 QQ反编译文件。详细的XML以及JAVA

    在移动互联网领域,QQ作为一款全球范围内广泛使用的即时通讯软件,其背后的技术实现一直是开发者们关注的焦点。本篇将围绕“android QQ 2012 QQ反编译文件”这一主题,探讨反编译过程中涉及的XML与JAVA编程技术,...

    gogs-2.2.99.zip

    jcabi-xml提供了简单易用的API,使得开发者可以方便地读取、写入和操作XML文档。它的核心特性包括: 1. **解析XML文档**:jcabi-xml能够将XML字符串或输入流转换为XML DOM(Document Object Model)对象,使得...

    lembos-1.0.zip

    在IT领域,开源项目一直是推动技术发展的重要力量,它们提供了丰富的代码资源和学习案例。今天我们将聚焦于一个名为“xml-event-limit-generator”的开源项目,它是一个Java库,专为生成XML字符串而设计。通过分析这...

    谷歌的开源项目

    谷歌的开源项目一直以来都是开发者们探索先进技术、提升编程技能的重要资源。其中,"protobuf"(Protocol Buffers)是谷歌发布的一个重要项目,它是一个数据序列化协议,旨在提供一种高效、灵活的方式来存储和传输...

    Android项目在线音乐播放器完整项目.rar

    6. **服务(Service)**:为了实现在后台持续播放音乐,项目可能会使用Android Service组件。Service可以在后台运行,即使用户离开应用也能保持音乐播放。 7. **通知栏控制**:当应用被最小化或后台运行时,音乐播放...

    android在线音乐播放器完整项目.rar

    在移动设备领域,Android系统因其开源特性与丰富的应用生态,一直是开发者们的热门选择。对于初学者而言,掌握Android应用开发是踏入这一领域的第一步。今天,我们将深入探讨一个适合新手的Android在线音乐播放器的...

    MyBaties项目

    - **SqlSessionFactory**:一旦被创建就会处理所有的 Session,它是线程安全的,通常在应用初始化时创建并一直使用。 - **SqlSession**:每个数据库操作都在一个 Session 中进行,它代表了一个数据库会话,用于...

Global site tag (gtag.js) - Google Analytics