• 通过XmlDocument读写Xml文档(转)


    通过XmlDocument读写Xml文档

    有如下一段Xml

    view sourceprint?<?xml version="1.0" encoding="utf-8" ?> 

    <students> 

      <!--我是一段注释文字-->

      <student name="张平"> 

        <courses> 

          <course name="语文?"> 

            <teacherComment> 

              <![CDATA[ 

            这里是语文老师的批注 

            ]]>

            </teacherComment>       

    </course> 

     <course name="数学"> 

            <teacherComment> 

              <![CDATA[ 

            这里是数学老师的批注 

            ]]>

            </teacherComment> 

          </course> 

        </courses> 

      </student> 

    </students>

    1.如何使用XmlDocument读取Xml

    我要用一段代码遍历所有Student,并打印Student的所有属性和子节点的值

    view sourceprint?/*玉开博客 http://www.cnblogs.com/yukaizhao/ */

    using System; 

    using System.Collections.Generic; 

    using System.Text; 

    using System.Xml; 

    namespace XmlExample 

    { 

        class Program 

        { 

            static void Main(string[] args) 

            { 

                string xmlFilePath = @"X:\about.net\example\XmlExample\1.xml"; 

     

                XmlDocument doc = new XmlDocument(); 

                doc.Load(xmlFilePath); 

                //使用xpath表达式选择文档中所有的student子节点 

                XmlNodeList studentNodeList = doc.SelectNodes("/students/student"); 

                if (studentNodeList != null) 

                { 

                    foreach (XmlNode studentNode in studentNodeList) 

                    { 

                        //通过Attributes获得属性名字为name的属性 

                        string name = studentNode.Attributes["name"].Value; 

                        Console.WriteLine("Student:" + name); 

                        //通过SelectSingleNode方法获得当前节点下的courses子节点                      XmlNode coursesNode = studentNode.SelectSingleNode("courses"); 

                        //通过ChildNodes属性获得courseNode的所有一级子节点 

                        XmlNodeList courseNodeList = coursesNode.ChildNodes; 

                        if (courseNodeList != null) 

                        { 

                            foreach (XmlNode courseNode in courseNodeList) 

                            { 

                                Console.Write("\t"); 

                                Console.Write(courseNode.Attributes["name"].Value); 

                                Console.Write("老师评语"); 

                                //通过FirstNode属性可以获得课程节点的第一个子节点,LastNode可以获得最后一个子节点 

                                XmlNode teacherCommentNode = courseNode.FirstChild; 

                                //读取CData节点 

                                XmlCDataSection cdata = (XmlCDataSection)teacherCommentNode.FirstChild; 

                                Console.WriteLine(cdata.InnerText.Trim()); 

                            } 

                        } 

                    } 

                } 

      

                Console.Write("\r\nPress any key to continue...."); 

                Console.Read(); 

            } 

        } 

    }

    XmlDocument本身是从XmlNode继承的,读Xml节点可以通过FirstChildLastChild,或者NextSiblingPreviousSibling读取单个节点,或者通过ChildNodes读取所有子节点。还可以使用XPath表达式使用SelectNodes(string xpath)或者SelectSingleNode(string xpath)读取单个或者多个符合条件的节点。

    2.如何通过XmlDocument编辑Xml

    同样是读取Xml中的xml例子,我们这次要用csharp代码生成xml,如下代码:

    view sourceprint?/*玉开博客 http://www.cnblogs.com/yukaizhao/ */

    using System; 

    using System.Collections.Generic; 

    using System.Text; 

    using System.Xml; 

      namespace WriteXml 

    { 

        class Program 

        { 

            static void Main(string[] args) 

            { 

                XmlDocument xmlDoc = new XmlDocument(); 

                //创建Xml声明部分,即<?xml version="1.0" encoding="utf-8" ?> 

                xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes"); 

    //创建根节点 

                XmlNode rootNode = xmlDoc.CreateElement("students"); 

                //创建student子节点 

                XmlNode studentNode = xmlDoc.CreateElement("student"); 

                //创建一个属性 

                XmlAttribute nameAttribute = xmlDoc.CreateAttribute("name"); 

                nameAttribute .Value = "张同学"; 

                //xml节点附件属性 

                studentNode.Attributes.Append(nameAttribute); 

               //创建courses子节点 

                XmlNode coursesNode = xmlDoc.CreateElement("courses"); 

                XmlNode courseNode1 = xmlDoc.CreateElement("course"); 

                XmlAttribute courseNameAttr = xmlDoc.CreateAttribute("name"); 

                courseNameAttr.Value = "语文"; 

     

                courseNode1.Attributes.Append(courseNameAttr); 

     

                XmlNode teacherCommentNode = xmlDoc.CreateElement("teacherComment"); 

                //创建Cdata 

                XmlCDataSection cdata = xmlDoc.CreateCDataSection("<font color=\"red\">这是语文老师的批注</font>"); 

                teacherCommentNode.AppendChild(cdata); 

                courseNode1.AppendChild(teacherCommentNode); 

                coursesNode.AppendChild(courseNode1); 

                //附加子节点 

                studentNode.AppendChild(coursesNode); 

                   rootNode.AppendChild(studentNode); 

                //附加根节点 

                xmlDoc.AppendChild(rootNode); 

                //保存Xml文档 

                xmlDoc.Save(@"d:\test.xml"); 

                Console.WriteLine("已保存Xml文档"); 

               } 

        } 

    }

    使用XmlDocument生成xml的要点在于使用xmlDocument的实例的CreateElement创建XmlNode或者通过CreateAttribute方法创建属性,并通过AppendChild方法附加xml节点,通过AppendAttribute附加Attribute到节点的属性集合。

  • 相关阅读:
    c++ mvc timer的应用
    table 在网页无法顶到头部问题
    vs2008 C++ 没有找到MSVCR90D.dll 问题
    FrametSet中各frame,iframe之间dom的访问
    关于VC中的Timer
    Vc2008中如何为视图类添加消息响应
    C++ map在MFC中的应用
    解决iframe 右边有空白的问题
    poj1125 Stockbroker Grapevine *
    poj1062 昂贵的聘礼 **
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2110447.html
Copyright © 2020-2023  润新知