.net与XML之"写"——"XmlDocument"
写起来还容易,用过Javascript写xml的话就很快上手
下面是代码,注释全在代码中了
Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
namespace XMLConsoleApplication
{
class Program
{
static void Main(string[] args)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("E:\\myTest.xml");
//创建Element元素节点
XmlElement eleLxr = xmlDoc.CreateElement("lxr");
//创建属性
XmlAttribute attID = xmlDoc.CreateAttribute("ID");
//属性值
attID.InnerText = "3";
//附加属性节点
eleLxr.SetAttributeNode(attID);
//直接添加属性
eleLxr.SetAttribute("Sex", "F");
//创建新的元素节点name
XmlElement eleName = xmlDoc.CreateElement("name");
//name的节点值
XmlNode nodeName = xmlDoc.CreateTextNode("张三");
//将节点值附加到name元素上
eleName.AppendChild(nodeName);
//创建元素category,直接赋值
XmlElement eleCategory = xmlDoc.CreateElement("category");
eleCategory.InnerText = "Family";
//添加注释节点
XmlComment commTest = xmlDoc.CreateComment("测试信息");
//添加CDATA节点块
XmlCDataSection cdataTest = xmlDoc.CreateCDataSection("这也是测试信息");
//添加预处理节点指令
XmlProcessingInstruction xpiTest = xmlDoc.CreateProcessingInstruction("xml-stylesheet"," type = 'text/xsl' href = 'test.xsl'");
//输出的是值。没有<>标记,且不能附加别的节点,附加的话报错“当前节点不能包含其他节点”
//XmlNode nodetest = xmlDoc.CreateTextNode("测试信息");
//nodetest.InnerText = " zhe shi shenme ";
//XmlNode nodetest2 = xmlDoc.CreateTextNode("测试信息2");
//Error!!当前节点不能包含其他节点
//nodetest.AppendChild(nodetest2);
//将节点附加到根节点
eleLxr.AppendChild(eleName);
eleLxr.AppendChild(eleCategory);
eleLxr.AppendChild(commTest);
eleLxr.AppendChild(cdataTest);
//------第二个lxr元素节点-----------------
XmlElement elelxr2 = xmlDoc.CreateElement("lxr");
elelxr2.SetAttribute("ID", "2");
elelxr2.SetAttribute("Sex", "M");
XmlElement elename2 = xmlDoc.CreateElement("name");
elename2.InnerText = "李四";
XmlElement elecategory2 = xmlDoc.CreateElement("category");
//Error!OuterXml只读
elecategory2.InnerText = " Family";
//AppendChild附加在最后一个
elelxr2.AppendChild(elename2);
elelxr2.AppendChild(elecategory2);
//------第三个lxr元素节点-------------------------
XmlElement elelxr3 = xmlDoc.CreateElement("lxr");
elelxr3.SetAttribute("ID", "3");
elelxr3.SetAttribute("Sex", "M");
XmlElement elename3 = xmlDoc.CreateElement("name");
elename3.InnerText = "王五";
XmlElement elecategory3 = xmlDoc.CreateElement("category");
//Error!OuterXml只读
elecategory3.InnerText = " Family";
//AppendChild附加在最后一个
elelxr3.AppendChild(elename3);
elelxr3.AppendChild(elecategory3);
//附加后直接显示数据,没有<>标记
// nodeLxr.AppendChild(nodetest);
// nodeLxr.AppendChild(nodetest2);
XmlNode root = xmlDoc.DocumentElement;
root.AppendChild(xpiTest);
root.AppendChild(cdataTest);
root.AppendChild(eleLxr);
//在elelxr之后插入elelxr2
root.InsertAfter(elelxr2, eleLxr);
//在elelxr之前插入elelxr2
root.InsertBefore(elelxr3,eleLxr);
//----------------修改节点--------------------
//先查找节点,可用GetElementsByTagName查找制定名称的元素集,也可以用Xpath查找
//修改节点内容
XmlNodeList xnlNames = xmlDoc.GetElementsByTagName("name");
xnlNames[0].InnerText = "值被修改了";
//使用XmlNode的ReplaceChild方法替换节点
XmlElement eleNewName = xmlDoc.CreateElement("name");
eleNewName.InnerText = "替换后的";
//要替换的节点必须是该节点的子集,
root.LastChild.ReplaceChild(eleNewName, elename2);
////----------------删除节点--------------------
//要删除的节点也必须是该节点的子集,否则报错:要移除的节点不是此节点的子级。
elelxr3.RemoveChild(elename3);
xmlDoc.Save("E:\\myTest.xml");
}
}
}
原先的XMLusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
namespace XMLConsoleApplication
{
class Program
{
static void Main(string[] args)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("E:\\myTest.xml");
//创建Element元素节点
XmlElement eleLxr = xmlDoc.CreateElement("lxr");
//创建属性
XmlAttribute attID = xmlDoc.CreateAttribute("ID");
//属性值
attID.InnerText = "3";
//附加属性节点
eleLxr.SetAttributeNode(attID);
//直接添加属性
eleLxr.SetAttribute("Sex", "F");
//创建新的元素节点name
XmlElement eleName = xmlDoc.CreateElement("name");
//name的节点值
XmlNode nodeName = xmlDoc.CreateTextNode("张三");
//将节点值附加到name元素上
eleName.AppendChild(nodeName);
//创建元素category,直接赋值
XmlElement eleCategory = xmlDoc.CreateElement("category");
eleCategory.InnerText = "Family";
//添加注释节点
XmlComment commTest = xmlDoc.CreateComment("测试信息");
//添加CDATA节点块
XmlCDataSection cdataTest = xmlDoc.CreateCDataSection("这也是测试信息");
//添加预处理节点指令
XmlProcessingInstruction xpiTest = xmlDoc.CreateProcessingInstruction("xml-stylesheet"," type = 'text/xsl' href = 'test.xsl'");
//输出的是值。没有<>标记,且不能附加别的节点,附加的话报错“当前节点不能包含其他节点”
//XmlNode nodetest = xmlDoc.CreateTextNode("测试信息");
//nodetest.InnerText = " zhe shi shenme ";
//XmlNode nodetest2 = xmlDoc.CreateTextNode("测试信息2");
//Error!!当前节点不能包含其他节点
//nodetest.AppendChild(nodetest2);
//将节点附加到根节点
eleLxr.AppendChild(eleName);
eleLxr.AppendChild(eleCategory);
eleLxr.AppendChild(commTest);
eleLxr.AppendChild(cdataTest);
//------第二个lxr元素节点-----------------
XmlElement elelxr2 = xmlDoc.CreateElement("lxr");
elelxr2.SetAttribute("ID", "2");
elelxr2.SetAttribute("Sex", "M");
XmlElement elename2 = xmlDoc.CreateElement("name");
elename2.InnerText = "李四";
XmlElement elecategory2 = xmlDoc.CreateElement("category");
//Error!OuterXml只读
elecategory2.InnerText = " Family";
//AppendChild附加在最后一个
elelxr2.AppendChild(elename2);
elelxr2.AppendChild(elecategory2);
//------第三个lxr元素节点-------------------------
XmlElement elelxr3 = xmlDoc.CreateElement("lxr");
elelxr3.SetAttribute("ID", "3");
elelxr3.SetAttribute("Sex", "M");
XmlElement elename3 = xmlDoc.CreateElement("name");
elename3.InnerText = "王五";
XmlElement elecategory3 = xmlDoc.CreateElement("category");
//Error!OuterXml只读
elecategory3.InnerText = " Family";
//AppendChild附加在最后一个
elelxr3.AppendChild(elename3);
elelxr3.AppendChild(elecategory3);
//附加后直接显示数据,没有<>标记
// nodeLxr.AppendChild(nodetest);
// nodeLxr.AppendChild(nodetest2);
XmlNode root = xmlDoc.DocumentElement;
root.AppendChild(xpiTest);
root.AppendChild(cdataTest);
root.AppendChild(eleLxr);
//在elelxr之后插入elelxr2
root.InsertAfter(elelxr2, eleLxr);
//在elelxr之前插入elelxr2
root.InsertBefore(elelxr3,eleLxr);
//----------------修改节点--------------------
//先查找节点,可用GetElementsByTagName查找制定名称的元素集,也可以用Xpath查找
//修改节点内容
XmlNodeList xnlNames = xmlDoc.GetElementsByTagName("name");
xnlNames[0].InnerText = "值被修改了";
//使用XmlNode的ReplaceChild方法替换节点
XmlElement eleNewName = xmlDoc.CreateElement("name");
eleNewName.InnerText = "替换后的";
//要替换的节点必须是该节点的子集,
root.LastChild.ReplaceChild(eleNewName, elename2);
////----------------删除节点--------------------
//要删除的节点也必须是该节点的子集,否则报错:要移除的节点不是此节点的子级。
elelxr3.RemoveChild(elename3);
xmlDoc.Save("E:\\myTest.xml");
}
}
}
<?xml version="1.0" encoding="gb2312"?>
<Mylxr>
</Mylxr>
<Mylxr>
</Mylxr>
运行程序之后的
Code
<?xml version="1.0" encoding="gb2312"?>
<Mylxr>
<?xml-stylesheet type = 'text/xsl' href = 'test.xsl'?>
<![CDATA[这也是测试信息]]>
<lxr ID="3" Sex="M">
<category> Family</category>
</lxr>
<lxr ID="3" Sex="F">
<name>张三</name>
<category>Family</category>
<!--测试信息-->
</lxr>
<lxr ID="2" Sex="M">
<name>替换后的</name>
<category> Family</category>
</lxr>
</Mylxr>
<?xml version="1.0" encoding="gb2312"?>
<Mylxr>
<?xml-stylesheet type = 'text/xsl' href = 'test.xsl'?>
<![CDATA[这也是测试信息]]>
<lxr ID="3" Sex="M">
<category> Family</category>
</lxr>
<lxr ID="3" Sex="F">
<name>张三</name>
<category>Family</category>
<!--测试信息-->
</lxr>
<lxr ID="2" Sex="M">
<name>替换后的</name>
<category> Family</category>
</lxr>
</Mylxr>
自己调试下试试……