先说一下XML的文档格式:
1、文档声明 文档中必须有一个根标签
<?xml version="1.0"?>
2、元素(根元素/顶层元素) = 标签
<student>
</student> 结束的时候加一个反斜杠
3、属性
<name>小明</name> 需要注意编码规则UTF-8
属性也可以像下面这样写:
<student name="小明"> 这里单引号和双引号都可以
</student>
4、注释
<!--注释-->
5、CDATA区
<![CDATA[不想被解析的内容]]>
6、特殊字符
- & &
- < <
- > >
- " " 浏览器单、双引号直接打也能输出,但是解析器不行
- ' '
c#对XML文件进行操作
using System.Xml;
public class RWxml
{
public void WriteXml()
{
XmlDocument xDoc = new XmlDocument(); //首先创建xml文档
XmlDeclaration declaration = xDoc.CreateXmlDeclaration("1.0","UTF-8","yes"); //创建xml文档声明所需变量
xDoc.AppendChild(declaration); //将节点添加到该节点子节点列表末尾
XmlElement elem = xDoc.CreateElement("students"); //每个xml必须有一个根节点,创建根节点students
xDoc.AppendChild(elem);
XmlElement elemChild1 = xDoc.CreateElement("student"); //添加子节点
elem.AppendChild(elemChild1); //将第一级的子节点添加到根节点的下面
elemChild1.SetAttribute("姓名","张三"); //给节点添加属性
elemChild1.SetAttribute("学号", "08080808");
XmlElement elemChild1_1 = xDoc.CreateElement("语文成绩"); //添加子节点(第三节点)
elemChild1.AppendChild(elemChild1_1);
elemChild1_1.InnerText = "80";//增加节点中的数据
XmlElement elemChild1_2 = xDoc.CreateElement("数学成绩"); //添加子节点(第三节点)
elemChild1.AppendChild(elemChild1_2);
elemChild1_2.InnerText = "90";
XmlElement elemChild1_3 = xDoc.CreateElement("英语成绩"); //添加子节点(第三节点)
elemChild1.AppendChild(elemChild1_3);
elemChild1_3.InnerText = "85";
xDoc.Save("students.xml");
}
public void ReadXml()
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load("students.xml");
//想要拿到下面的值首先要获取根节点(如果重名只取第一个)//
XmlNode node = xDoc.SelectSingleNode("students"); //获取根节点
XmlNodeList nodeList = node.ChildNodes; //获取节点的所有子节点
foreach(XmlNode xn in nodeList)
{
//string name = xn.Name; //节点的名字
//做类型显示转换才能调到属性//
XmlElement xmle = (XmlElement)xn;
string name = xmle.GetAttribute("姓名");
string banji = xmle.GetAttribute("学号");
XmlNodeList childrenList = node.ChildNodes; //获取节点的所有子节点
foreach (XmlNode n in childrenList)
{
XmlElement xe = (XmlElement)xn;
string subject = xe.Name;
string score = xe.InnerText;
Console.WriteLine(subject + score);
}
}
}
}
注意:修改xml参数之后一定要Save一下!