zoukankan      html  css  js  c++  java
  • 通过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到节点的属性集合。

  • 相关阅读:
    UVa 1151 Buy or Build【最小生成树】
    UVa 216 Getting in Line【枚举排列】
    UVa 729 The Hamming Distance Problem【枚举排列】
    HDU 5214 Movie【贪心】
    HDU 5223 GCD
    POJ 1144 Network【割顶】
    UVa 11025 The broken pedometer【枚举子集】
    HDU 2515 Yanghee 的算术【找规律】
    Java基本语法
    Java环境变量,jdk和jre的区别,面向对象语言编程
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2110447.html
Copyright © 2011-2022 走看看