XML(可扩展标记语言)
定义:用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
一、创建xml文件
private void Creat()
{
XmlTextWriter writer = new XmlTextWriter("xmlTest.xml", System.Text.Encoding.UTF8);
//使用自动缩进便于阅读
writer.Formatting = Formatting.Indented;
//XML声明
writer.WriteStartDocument();
//书写根元素
writer.WriteStartElement("Root");
//开始一个元素
writer.WriteStartElement("Item");
//向先前创建的元素中添加一个属性
writer.WriteAttributeString("Id", "1");
//添加子元素 writer.WriteElementString("title", "表单");
writer.WriteElementString("Value", "100");
writer.WriteElementString("Value", "200");
//关闭item元素
writer.WriteEndElement(); // 关闭元素
//在节点间添加一些空
writer.Close();
}
执行后生成xmlTest.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Item Id="1">
<Value>100</Value>
<Value>200</Value>
</Item>
</Root>
二、读取节点内容
private void Read()
{
// 1.创建一个XmlDocument类的对象
XmlDocument doc = new XmlDocument();
// 2.把你想要读取的xml文档加载进来
doc.Load("xmlTest.xml");
// 3.读取你指定的节点,注意这是个节点集合类型
XmlNodeList lis = doc.GetElementsByTagName("Value");
// 4.取节点中的值
String str = lis[0].InnerText;
// 5.显示节点中的值
MessageBox.Show(str);
}
三、插入新节点
private void Insert()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("xmlTest.xml");
XmlNode root = xmlDoc.SelectSingleNode("Root");//查找
XmlElement xe1 = xmlDoc.CreateElement("Title");//创建一个节点
xe1.SetAttribute("Name", "EasyLife");//设置该节点Name属性
xe1.SetAttribute("Number", "002");//设置该节点Number属性
XmlElement xesub1 = xmlDoc.CreateElement("Group");
xesub1.InnerText = "Hello World";//设置文本节点
xe1.AppendChild(xesub1);//添加到节点中
XmlElement xesub2 = xmlDoc.CreateElement("Step");
xesub2.InnerText = "Hello Body";
xe1.AppendChild(xesub2);
root.AppendChild(xe1);//添加到节点中
xmlDoc.Save("xmlTest.xml");
}
运行结果:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Item Id="1">
<Value>100</Value>
<Value>200</Value>
</Item>
<Title Name="EasyLife" Number="002">
<Group>Hello World</Group>
<Step>Hello Body</Step>
</Title>
</Root>
四、修改节点或者属性
private void Modify()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("xmlTest.xml");
XmlNodeList nodeList = xmlDoc.SelectSingleNode("Root").ChildNodes;//获取Root节点的所有子节点
foreach (XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
if (xe.GetAttribute("Number") == "002")//如果Number属性值为“002”
{
xe.SetAttribute("Number", "0021");//则修改该属性为“0021”
XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点
foreach (XmlNode xn1 in nls)//遍历
{
XmlElement xe2 = (XmlElement)xn1;//转换类型
if (xe2.Name == "Group")//如果找到
{
xe2.InnerText = "Hello Hello";//则修改
break;//找到退出来就可以了
}
}
break;
}
}
xmlDoc.Save("xmlTest.xml");//保存。
}
运行结果:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Item Id="1">
<Value>100</Value>
<Value>200</Value>
</Item>
<Title Name="EasyLife" Number="0021">
<Group>Hello Hello</Group>
<Step>Hello Body</Step>
</Title>
</Root>
五、删除节点或者属性
private void Delete()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("xmlTest.xml");
XmlNodeList xnl = xmlDoc.SelectSingleNode("Root").ChildNodes;
foreach (XmlNode xn in xnl)
{
XmlElement xe = (XmlElement)xn;
if (xe.GetAttribute("Number") == "002")
{
xe.RemoveAttribute("Number");//删除Number属性
}
else if (xe.GetAttribute("Number") == "0021")
{
xe.RemoveAll();//删除该节点的全部内容
}
}
xmlDoc.Save("xmlTest.xml");
}
运行结果:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Item Id="1">
<Value>100</Value>
<Value>200</Value>
</Item>
<Title>
</Title>
</Root>
六、显示所有数据
private void Display()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("xmlTest.xml");
XmlNode xn = xmlDoc.SelectSingleNode("Root");
XmlNodeList xnl = xn.ChildNodes;
foreach (XmlNode xnf in xnl)
{
XmlElement xe = (XmlElement)xnf;
Console.WriteLine(xe.GetAttribute("Number"));//显示属性值
Console.WriteLine(xe.GetAttribute("Name"));
XmlNodeList xnf1 = xe.ChildNodes;
foreach (XmlNode xn2 in xnf1)
{
Console.WriteLine(xn2.InnerText);//显示子节点点文本
}
}
}
简单使用示例:
一、创建xml文件
XmlTextWriter writer = new XmlTextWriter("xmlTest.xml", System.Text.Encoding.UTF8);
writer.Formatting = Formatting.Indented;
writer.WriteStartDocument();
writer.WriteStartElement("Root");
writer.WriteEndElement();
writer.Close();
二、每次写入节点数据
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("xmlTest.xml");
XmlNode root = xmlDoc.SelectSingleNode("Root");
XmlElement xe1 = xmlDoc.CreateElement("Title");
xe1.SetAttribute("Name", "EasyLife");
xe1.SetAttribute("Number", "001");
root.AppendChild(xe1);
xmlDoc.Save("xmlTest.xml");
写入三次数据后的文件
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Item Name="EasyLife" Number="001" />
<Item Name="EasyLife" Number="001" />
<Item Name="EasyLife" Number="001" />
</Root>
三、读取数据
XmlDocument doc = new XmlDocument();
doc.Load("xmlTest.xml");
XmlNodeList nodeList = doc.SelectSingleNode("List").ChildNodes;
foreach (XmlNode xn in nodeList)
{
XmlElement xe = (XmlElement)xn;
Item item = new Item();
item.Name = xe.GetAttribute("Name");
item.Number= xe.GetAttribute("Number");
}