先简单介绍一下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);
如果我们的格式是这样
<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);
}