• C# 中对xml文件的操作


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

    2.通过XmlWriter和XmlReader读写Xml文档
    3.使用Linq to xml存取XML
    4.通过XmlScheme定义固定格式xml文档
    5.Xml序列化或者反序列化类
    6.通过XPath查找Xml节点
    7.通过Xslt转化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.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节点可以通过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:\test.xml");
      
                Console.WriteLine("已保存Xml文档");
      
      
            }
        }
    }

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

  • 相关阅读:
    NTC温度检测程序(转)
    基于GPS的经纬度、方位角、距离、航向计算及基于单目视觉的距离计算!
    GPS速度和航向计算(转)
    NOR、 NAND、Raw Flash和 Managed Flash的区别(转)
    FreeModbus V1.6 主机使用说明(转)
    只要单片机具有真正唯一ID,就可以让加密坚不可摧(转)
    Java 给Word添加数字签名
    Java 获取Word中指定图片的坐标位置
    C#/VB.NET 自定义PPT动画路径
    在线编辑Excel——插入图表
  • 原文地址:https://www.cnblogs.com/wsl2011/p/2110729.html
Copyright © 2020-2023  润新知