你好,欢迎访问我的博客!登录
当前位置:首页 - 教程 - 正文 君子好学,自强不息!

c#中xmldocument使用教程

2018-06-14 12:41:54教程admin42°c
A+ A-
文章目录
目录

xmldocument

对XML文档的操作的前提是:XML文档已经存在,并且根节点已经存在。在XML文档中,节点、属性都是区分大小写的。对于某个节点的属性,Name是不能重复的,即使在定义属性的时候,定义了两个name完全相同的属性,添加到同一个节点上面,后面的属性会把前面的属性覆盖,不会报语法错误;对于某个节点下面的子节点,则可以添加多个完全相同的子节点。


添加节点和属性

1、定义一个XML的操作对象:

XmlDocument doc = new XmlDocument();

2、加载一个XML文件:

doc.Load(@"D:\App.config");

指定的文件一定要存在,否则会报错的。

3、获取根节点:

XmlNode root = doc.DocumentElement;

4、定义一个属性:

XmlAttribute ra = doc.CreateAttribute("Name");

5、给属性的值赋值:

ra.Value = "zwj2";

6、将属性添加到节点上面:

root.Attributes.Append(ra);

7、再定义一个节点为根节点的子节点:

XmlNode root1 = doc.CreateElement("table");

8、给节点赋文本值:

root1.InnerText = "sdf1";

9、给节点定义并添加属性

10、将该节点添加到父节点上去:

root.AppendChild(root1);

11、保存XML文档:

doc.Save(@"D:\App.config");

注意:可以对一个节点添加多个属性,那么各个属性会依次往后排;可以给根节点添加多个子节点,也可以对子节点再添加多个子节点。

查询和修改节点和属性


1、元素结点有Name属性,就是<>里面的串,也有InnerText属性(相当于文本结点),就是<></>之间的串:root.Name、root.InnerText。这些属性都是可以读写的。------------------------------XmlNode

2、属性结点有Name,也有Value:providerName="System.Data.SqlClient",前面为Name,后面为Value这些属性既可读也可写。-----------------------------------------------------------XmlAttribute

3、每一个结点有子结点的集合,也有属性的集合:root.ChildNodes、root.Attributes;集合都有count属性。

4、集合都满足索引:

对于属性集合,属性的name是不能重复的,所以索引可以是name字符串索引,那么name字符串要存在,否则返回的是一个null属性对象,不会报错;也可以是整数索引,那么此时的整数不能越界,否则是会报错的;:root.Attributes["name"]、root.Attributes[0],返回XmlAttribute。

对于子节点的集合,因为子节点可以完全相同,那么子节点的name肯定也可以相同,所以此时的索引只能是整数的,而不能是子节点name字符串,整数索引也不能越界,否则会报错: root.ChildNodes[10],返回XmlNode。

几个重要的函数

1、XmlNode XmlDocument.SelectSingleNode(@"configuration/twoNode/dayStart")

这个函数是用一个声明好的并且已经成功加载了某个配置文件的XmlDocument对象去调用SelectSingleNode函数;该函数的参数是配置文件中的从根节点名字开始一直往下最终到想要的节点的名字,整个名字路径都不能出错,注意是左斜杠;函数的返回值是第一次找到的XmlNode节点的对象,如果找不到就会返回null。

操作如下xml:

<?xmlversion="1.0"?>

<configuration>

  <twoNode>

  </twoNode>

  <twoNode>

    <dayStart>1</dayStart>

    <dayStart>2</dayStart>

    <dayStart>3</dayStart>

  </twoNode> 

</configuration>

如果执行该函数,那么将会找到节点:<dayStart>1</dayStart>

2、XmlNodeList XmlDocument.SelectNodes (@"configuration/twoNode/dayStart")

这个函数是用一个声明好的并且已经成功加载了某个配置文件的XmlDocument对象去调用SelectNodes函数;该函数的参数是配置文件中的从根节点名字开始一直往下最终到想要的节点的名字,整个名字路径都不能出错,注意是左斜杠;因为节点的名字是可能重复的,所以函数的返回值是找到的所有XmlNode节点对象的集合XmlNodeList,如果找不到就会返回null。

XmlNodeList是集合,那么就有count属性,可以直接对这个集合用[int index]来索引具体的对象,也可以用集合的Item(int index)函数来索引具体的对象,但是索引不能越界,否则会出错,返回的是XmlNode。

操作如下xml:

<?xmlversion="1.0"?>

<configuration>

  <twoNode>

    <dayStart>-1</dayStart>

    <dayStart>-2</dayStart>

    <dayStart>-3</dayStart>

  </twoNode>

  <twoNode>

    <dayStart>1</dayStart>

    <dayStart>2</dayStart>

    <dayStart>3</dayStart>

  </twoNode> 

</configuration>

如果执行该函数,那么将会找到节点集合:

    <dayStart>-1</dayStart>

    <dayStart>-2</dayStart>

<dayStart>-3</dayStart>

    <dayStart>1</dayStart>

    <dayStart>2</dayStart>

<dayStart>3</dayStart>

 

操作如下xml:

<?xmlversion="1.0"?>

<configuration>

  <twoNode>

  </twoNode>

  <twoNode>

    <dayStart>1</dayStart>

    <dayStart>2</dayStart>

    <dayStart>3</dayStart>

  </twoNode> 

</configuration>

如果执行该函数,那么将会找到节点集合:

    <dayStart>1</dayStart>

    <dayStart>2</dayStart>

    <dayStart>3</dayStart>

xml操作实例

using System;
using System.Windows.Forms;
using System.Xml;
namespace XMLDemo
{
    public partial class FrmDOM : Form
    {
        public FrmDOM()
        {
            InitializeComponent();
        }
        private void btnLoad_Click(object sender, EventArgs e)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("Books.xml");
            MessageBox.Show(xmlDoc.InnerXml);
        }
        private void btnCreate_Click(object sender, EventArgs e)
        {
            //xml文档
            XmlDocument xmlDoc = new XmlDocument();
            XmlDeclaration dec = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);
            xmlDoc.AppendChild(dec);
            //创建根节点 
            XmlElement root = xmlDoc.CreateElement("Books");
            xmlDoc.AppendChild(root);
            //节点及元素
            XmlNode book = xmlDoc.CreateElement("Book");
            XmlElement title = GetXmlElement(xmlDoc, "Title", "Window Form");
            XmlElement isbn = GetXmlElement(xmlDoc, "ISBN", "111111");
            XmlElement author = GetXmlElement(xmlDoc, "Author", "amandag");
            XmlElement price = GetXmlElement(xmlDoc, "Price", "128.00");
            price.SetAttribute("Unit", "¥");
            book.AppendChild(title);
            book.AppendChild(isbn);
            book.AppendChild(author);
            book.AppendChild(price);
            root.AppendChild(book);
            xmlDoc.Save("Books.xml");
            MessageBox.Show("数据已写入!");
        }
        private void btnInsert_Click(object sender, EventArgs e)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("Books.xml");
            XmlNode root = xmlDoc.SelectSingleNode("Books");
            XmlElement book = xmlDoc.CreateElement("Book");
            XmlElement title = GetXmlElement(xmlDoc, "Title", "ASP.NET");
            XmlElement isbn = GetXmlElement(xmlDoc, "ISBN", "222222");
            XmlElement author = GetXmlElement(xmlDoc, "Author", "moon");
            XmlElement price = GetXmlElement(xmlDoc, "Price", "111.00");
            price.SetAttribute("Unit", "{1}quot;);
            book.AppendChild(title);
            book.AppendChild(isbn);
            book.AppendChild(author);
            book.AppendChild(price);
            root.AppendChild(book);
            xmlDoc.Save("Books.xml");
            MessageBox.Show("数据已插入!");
        }
        private void btnUpdate_Click(object sender, EventArgs e)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("Books.xml");
            //方法1:获取Books//Book节点的第一个子节点 
            XmlNodeList nodeList = xmlDoc.SelectSingleNode("Books//Book").ChildNodes;
            XmlElement xe = null;
            //遍历所有子节点 
            foreach (XmlNode xn in nodeList)
            {
                //将子节点类型转换为XmlElement类型 
                xe = (XmlElement)xn;
                if (xe.Name == "Author" && xe.InnerText == "amandag")
                {
                    xe.InnerText = "高歌";
                }
                if (xe.GetAttribute("Unit") == "¥")
                {
                    xe.SetAttribute("Unit", "{1}quot;);
                }
            }
            //方法2:
            XmlNode node = xmlDoc.SelectSingleNode("Books//Book[Author=\"moon\"]//Author");
            if(node != null)
            {
                node.InnerText = "宝贝";
            }
    
            xmlDoc.Save("Books.xml");
            MessageBox.Show("数据已更新!");
        }
        private void btnDelete_Click(object sender, EventArgs e)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("Books.xml");
            XmlNodeList nodeList = xmlDoc.SelectNodes("Books//Book//Price[@Unit=\"$\"]");
            //遍历所有子节点 
            foreach (XmlNode xn in nodeList)
            {
                XmlElement xe = (XmlElement)xn;
                xe.RemoveAttribute("Unit");
            }
            xmlDoc.Save("Books.xml");
            MessageBox.Show("数据已删除!");
        }
        private XmlElement GetXmlElement(XmlDocument doc, string elementName, string value)
        {
            XmlElement element = doc.CreateElement(elementName);
            element.InnerText = value;
            return element;
        }
    }
}


  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
c#中xmldocument使用教程

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>


  用户登录