开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:649

当前位置:游戏蛮牛 技术专区 教程分享

查看: 666|回复: 4

[基础知识] C#操作XML

[复制链接]  [移动端链接]
7日久生情
1712/5000
排名
633
昨日变化
6

6

主题

228

帖子

1712

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
59634
好友
27
蛮牛币
3680
威望
0
注册时间
2014-12-5
在线时间
424 小时
最后登录
2017-7-28
QQ
发表于 2016-12-5 17:17:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
什么是XML?
XML是扩展标记语言的简写,是一种开发的文本格式。
.Net是如何处理XML的呢?
本文首先从读、写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.Xml;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            string xmlFilePath = @"C:\Users\xujianan\Desktop\LearnXML.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;
                    Console.WriteLine(courseNodeList.Count);

                    if (courseNodeList != null)
                    {
                        foreach (XmlNode courseNode in courseNodeList)
                        {
                            Console.Write("\t");
                            Console.Write(courseNode.Name);
                            Console.Write(courseNode.Attributes["name"].Value);
                            Console.Write("老师评语");

                            XmlNode teacherCommentNode = courseNode.FirstChild;

                            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
using System;
using System.Xml;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlDocument xmlDoc = new XmlDocument();

            XmlDeclaration tempXmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes");
            xmlDoc.AppendChild(tempXmlDeclaration);

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

            XmlAttribute nameAttribute = xmlDoc.CreateAttribute("name");
            nameAttribute.Value = "张同学";
            studentNode.Attributes.Append(nameAttribute);

            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");
            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);

            xmlDoc.Save(@"d:\test.xml");
            Console.WriteLine("已保存Xml文档");

        }
    }
}

以上两段代码分别从读取XML文件和编辑XML文件的角度对XML相关知识进行了简要介绍。














[发帖际遇]: caiguangduo 在论坛发帖时没有注意,被小偷偷去了 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

4四处流浪
405/500
排名
4457
昨日变化
3

0

主题

34

帖子

405

积分

Rank: 4

UID
119541
好友
0
蛮牛币
651
威望
0
注册时间
2015-8-24
在线时间
138 小时
最后登录
2017-7-27
发表于 2016-12-7 10:17:19 | 显示全部楼层
谢谢楼主,学习了

回复

使用道具 举报

5熟悉之中
589/1000
排名
3920
昨日变化
21

0

主题

71

帖子

589

积分

Rank: 5Rank: 5

UID
92835
好友
1
蛮牛币
620
威望
0
注册时间
2015-4-16
在线时间
246 小时
最后登录
2017-7-28
发表于 2016-12-29 16:03:17 | 显示全部楼层
非常感谢楼主,这可以说是入门基础了

回复 支持 反对

使用道具 举报

5熟悉之中
618/1000
排名
4189
昨日变化
28

0

主题

196

帖子

618

积分

Rank: 5Rank: 5

UID
164084
好友
0
蛮牛币
1378
威望
0
注册时间
2016-8-24
在线时间
170 小时
最后登录
2017-7-27
发表于 2017-7-4 11:07:39 | 显示全部楼层
非常感谢分享

回复

使用道具 举报

4四处流浪
450/500
排名
7006
昨日变化
82

0

主题

219

帖子

450

积分

Rank: 4

UID
209046
好友
0
蛮牛币
691
威望
0
注册时间
2017-3-30
在线时间
101 小时
最后登录
2017-7-28

一贫如洗

发表于 前天 08:48 | 显示全部楼层
入门 赞

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表