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

  • 相关阅读:
    《Machine Learning in Action》—— 白话贝叶斯,“恰瓜群众”应该恰好瓜还是恰坏瓜
    《Machine Learning in Action》—— 女同学问Taoye,KNN应该怎么玩才能通关
    《Machine Learning in Action》—— Taoye给你讲讲决策树到底是支什么“鬼”
    深度学习炼丹术 —— Taoye不讲码德,又水文了,居然写感知器这么简单的内容
    《Machine Learning in Action》—— 浅谈线性回归的那些事
    《Machine Learning in Action》—— 懂的都懂,不懂的也能懂。非线性支持向量机
    《Machine Learning in Action》—— hao朋友,快来玩啊,决策树呦
    《Machine Learning in Action》—— 剖析支持向量机,优化SMO
    《Machine Learning in Action》—— 剖析支持向量机,单手狂撕线性SVM
    JVM 字节码指令
  • 原文地址:https://www.cnblogs.com/wsl2011/p/2110729.html
Copyright © 2011-2022 走看看