zoukankan      html  css  js  c++  java
  • C#操作Xml:通过XmlDocument读写Xml文档

    什么是Xml?

    Xml是扩展标记语言的简写,是一种开发的文本格式。关于它的更多情况可以通过w3组织了解http://www.w3.org/TR/1998/REC-xml-19980210。如果你不知道它,那你就out太多了。
    .Net是如何处理Xml的?

    通过XmlDocument读写Xml文档
    有如下一段Xml:
    <?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的所有属性和子节点的值
    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.netexampleXmlExample1.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(" ");
                                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(" Press any key to continue....");
                Console.Read();
            }
        }
    }
    XmlDocument本身是从XmlNode继承的,读Xml节点可以通过FirstChild,LastChild,或者NextSibling,PreviousSibling读取单个节点,或者通过ChildNodes读取所有子节点。还可以使用XPath表达式使用SelectNodes(string xpath)或者SelectSingleNode(string xpath)读取单个或者多个符合条件的节点。
    2.如何通过XmlDocument编辑Xml
    同样是读取Xml中的xml例子,我们这次要用csharp代码生成xml,如下代码:
    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: est.xml");
     
                Console.WriteLine("已保存Xml文档");
     
     
            }
        }
    }

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

  • 相关阅读:
    How to build Linux system from kernel to UI layer
    Writing USB driver for Android
    Xposed Framework for Android 8.x Oreo is released (in beta)
    Linux Smartphone Operating Systems You Can Install Today
    Librem 5 Leads New Wave of Open Source Mobile Linux Contenders
    GUADEC: porting GNOME to Android
    Librem 5 – A Security and Privacy Focused Phone
    GNOME and KDE Join Librem 5 Linux Smartphone Party
    Purism计划推出安全开源的Linux Librem 5智能手机
    国产系统之殇:你知道的这些系统都是国外的
  • 原文地址:https://www.cnblogs.com/itjeff/p/4262583.html
Copyright © 2011-2022 走看看