c#操作XML

本文介绍了XML文档的基本组成,包括元素、属性、声明和名称空间等,并详细讲解了如何使用C#进行XML文档的操作,涉及文档的加载、遍历、查找、修改、插入和删除节点等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先简单介绍一下XML文档的一些组成元素

XML元素

xml元素包含一个开始标记<放在尖括号中的元素名称>,元素中的数据,结束标记。

<book>c#</book>,开始标记为<book>,结束标记为</book>,数据为c#

元素名称区分大小写,在父元素开始前必须将子元素都结束;

XML特性

除了在元素体内存储数据外,也可以在特性内存储数据,将特性添加到元素的开始标记内;

<book name = "c#"></book>,这里的name="c#"即为节点book的特性

这句话等同于:

<book> <name>c#</name></book>

XML声明

一般会声明XML的版本号,和用的编码格式

<?xml version="1.0" encoding="utf-8"?> 

XML名称空间

语法:名称空间:元素

如:<wrox:book>表示wrox名称空间中的<book>元素,但是如何知道名称空间wrox所表示的内容呢?为了得到内容,我们首先应该保证名称空间wrox的值是唯一的。

我们可以用xmlns:prefix特性给名称空间赋值。

如:

<book xmlns:wrox="www.baidu.com">

<wrox:title>c#</wrox:title>

<book>

也可以使用xmlns为元素定义默认的名称空间

<book xmlns="www.baidu.com"> </book>

XML模式

主要为了定义XML文档中可以防止哪些元素和特性,及其放置顺序。


c#操作XML

下面是一些常用到的类


首先我们创建一个XMl文件,在vs中的File菜单中可以直接创建,我们把这个文档保存为books.xml

<?xml version="1.0" encoding="utf-8"?>
<books>
  <book> 
    <title> C#</title>
    <author>JDD</author>
  </book>
  <book>
    <title>C++</title>
    <author>JXX</author>
  </book>
  <book name="zdd" age="18">
  </book>
  <test>dd</test>
</books>

XmlDocument类 加载XML文件到内存

我们使用XmlDocument类来加载XMl文件,XmlDocument类中的属性DocumentElement表示XML文档的根节点,我们用这个根节点来操作XML文档

XmlDocument document = new XmlDocument();
document.Load("books.xml");
XmlElement rootElement= document.DocumentElement;

XmlElement类 对XML中的元素进行操作


XML遍历代码片段

public void PrintXml() {
        ShowXml(rootElement);
    }

    void ShowXml(XmlNode node) {
        if (node == null) {
            Debug.Log("node is null");
            return;
        }
        if (node is XmlText) {
            Debug.Log("name " + node.Name + " value " + node.Value);
        }
        if (node is XmlComment) {
            Debug.Log("OuterXml " + node.OuterXml);
            Debug.Log("name " + node.Name + " value " + node.Value);
        }
        if (node.Attributes != null) {
            if (node.Attributes.Count > 0)
            {
                foreach (XmlAttribute xa in node.Attributes)
                {
                    Debug.Log("name " + xa.Name + " value " + xa.Value);
                }
            }
        }
        
        if (node.HasChildNodes) {
            foreach (XmlNode child in node.ChildNodes) {
                ShowXml(child);
            }
        }
    }

XML查找节点



这两个方法中的参数是要查找节点的路径,可用下面的语义


比如

XmlNode node = rootElement.SelectSingleNode("/books/test");
Debug.Log("name " + node.Name + " value " + node.Value);


XML修改节点


如果我们的格式是这样

<books>

<test>java</test>

</books>

我们应该这样修改节点

XmlNode node = rootElement.SelectSingleNode("/books/test");
node.InnerText = "c#";

如果我们的格式是这样

<books title="java"></books>

我们应该这样修改节点

XmlNode node = rootElement.SelectSingleNode("/books/test");
XmlNode tmpNode = node.SelectSingleNode("@name");
tmpNode.value= "c#";
这里解释一下
<title>java</title> 其中title是节点名,但是java不是节点的数据,也就是我们获取到这个节点后,打印这个节点的null会是null,数据"java"其实是存在与title下面的XmlText节点中的。我们获取到节点title后,调用节点中的InnerText属性即可获取到数据"java"


获取节点中数据的方法:



XML插入节点
XML插入节点分为两步
第一步 创建节点


第二步 插入节点


代码片段

public void ChangeXML() {
        XmlElement newBook = document.CreateElement("book");
        XmlElement newTitle = document.CreateElement("title");
        XmlElement newAuthor = document.CreateElement("author");

        XmlText title = document.CreateTextNode("java");
        XmlText author = document.CreateTextNode("JNN");
        XmlComment comment = document.CreateComment("New Node");
        newBook.AppendChild(comment);
        newBook.AppendChild(newTitle);
        newBook.AppendChild(newAuthor);

        newTitle.AppendChild(title);
        newAuthor.AppendChild(author);

        rootElement.InsertAfter(newBook, rootElement.LastChild);

        document.Save(xmlPath);
    }


XML删除节点



代码片段

public void DeleteXML() {
        XmlNode node = rootElement.LastChild;
        rootElement.RemoveChild(node);
        document.Save(xmlPath);
    }












                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值