DOM处理XML文档文件时,XML的所有数据都存放在内存中,能够用于读取、处理和修改XML文档。.NET框架类库中定义了一系列处理DOM的类,核心是XmlNode和XmlDocument。
XmlDocument类的Load方法将文档置于内存中。
在现有的XML中添加一个带属性和文字值的元素
/*
原有XML片段
<book>
<title>红楼梦</title>
</book>
*/
XmlDocument doc = new XmlDocument();//创建XmlDocument对象
doc.LoadXml("<book><title>红楼梦</title></book>");//转载XML片段,该方法从字符串中读取 XML。
XmlElement elem = doc.CreateElement("Price");//创建一个新的元素节点
XmlAttribute attr = doc.CreateAttribute("format");//创建属性
attr.Value = "RMB";
elem.SetAttributeNode(attr);//将属性赋予元素节点
XmlText text = doc.CreateTextNode("20");//创建文本节点
ele.AppendChild(text);//将文本节点作为元素的值
doc.DocumentElement.AppendChild(elem);//将元素添加到XML中
/*
<book>
<title>红楼梦</title>
<Price format="RMB">20</Price>
</book>
*/
XmlDocument类的ImportNode方法用来将节点从一个XmlDocument对象复制到另一个XmlDocument对象中。复制之后,新目标文档添加了一个新节点对象。
try
{
XmlDocument doc1 = new XmlDocument();
doc1.LoadXml("<book><title>红楼梦</title><Price format="RMB">20</Price></book>");
XmlDocument doc2 = new XmlDocument();
doc2.LoadXml("<author>曹雪芹</author>");
XmlNode newNode=doc1.ImportNode(doc2.DocumentElement,true);
doc1.DocumentElement.AppendChild(newNode);
doc1.save("mm.xml");
}
catch(Exception ex)
{
console.WriteLine(ex.Message);
}
/*
<book>
<title>红楼梦</title>
<Price format="RMB">20</Price>
<author>曹雪芹</author>
</book>
*/
删除属性,修改节点的值和删除节点的方法
XmlDocument doc = new XmlDocument();
doc.LoadXml("<book><title>红楼梦</title><Price format="RMB">20</Price></book>");
XmlElement root = doc.DocumentElement;//获取根元素
XmlNodeList nodes = root.ChildNodes;//根元素的子节点列表
XmlElement el = nodes[1] as XmlElement;//获取第二个元素
el.RemoveAttribue("format");//删除名为"format"的属性
XmlNodeList ns = el.ChildNodes;//第二个元素的子节点列表
ns[0].value = "25";//将节点的值改为25
root.RemoveChild(root.Firstchild);//删除XML片段的第一个元素
XmlNode对象表示节点,节点的所有子节点包含在其ChildNodes属性中,这是一个集合。FirstChild属性表示其第一个子节点。SelectSingleNode、ChildNodes[int i]、Attributes[int i]选择节点。
结合代码说明
string xmlpath = Application.StartupPath + "\\config5.xml";// 或者 string filepath = Environment.CurrentDirectory;//获取当前路径
if (File.Exists(xmlpath))
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlpath);
XmlNode root = xmlDoc.SelectSingleNode("Camera_Interface_Application");
XmlNodeList nodelist = root.ChildNodes;//获得根元素的子节点列表
foreach (XmlElement el in nodelist) //读元素值
{
XmlElement el1 = (XmlElement)el;
if (el1.Name == "camera")
{
XmlNodeList nodelist1 = el1.ChildNodes;
foreach (XmlElement el2 in nodelist1) //读元素值
{
if (el2.Name == "grabber")
{
XmlElement el3 = el2;
XmlNodeList nodelist3 = el3.ChildNodes;
foreach (XmlElement el4 in nodelist3) //读元素值
{
if (el4.Name == "size_y_channel_0")
{
//XmlElement el5 = el4;
string s = el4.InnerText;
el4.InnerText = "100";
break;
}
}
}
if (el2.Name == "camera_properties")
{
XmlElement el3 = el2;
XmlNodeList nodelist3 = el3.ChildNodes;
foreach (XmlElement el4 in nodelist3) //读元素值
{
if (el4.Name == "size_y")
{
//XmlElement el5 = el4;
el4.InnerText = "100";
break;
}
}
}
}
}
}
xmlDoc.Save("config6.xml");
}
XmlDocument类表示XML文档。包括用于检索和创建所有其他XML对象成员,可以构造XML文档、加载和访问数据、修改数据,以及保存更改。
save将内存中的XML信息保存到XML文件中。
public static void Main(string[] args)
{
string filepath = Environment.CurrentDirectory;//获取当前路径
filepath += "\\LedxmlConfig.xml";
try
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("<books/>");
XmlElement root = doc.DocumentElement;
//创建XML声明
XmlDeclaration xmldecl = doc.CreateXmlDeclaration("1.0", null, null);
//添加到文档的最开始位置
doc.InsertBefore(xmldecl, root);
//创建子元素
XmlElement el1 = AddChildNode(doc, "红楼梦", "曹雪芹", "25");
XmlElement el2 = AddChildNode(doc, "三国演义", "罗贯中", "20");
XmlElement el3 = AddChildNode(doc, "水浒传", "施耐庵", "18");
XmlElement el4 = AddChildNode(doc, "西游记", "吴承恩", "16");
root.AppendChild(el1);//将子元素添加为根元素的子元素
root.AppendChild(el2);
root.AppendChild(el3);
root.AppendChild(el4);
doc.Save(filepath);
}
catch
{
}
}
private static XmlElement AddChildNode(XmlDocument doc,string title,string author,string price)
{
XmlElement el = doc.CreateElement("book");//创建book元素
XmlElement el1 = doc.CreateElement("title");//创建title元素
XmlNode txt1 = doc.CreateTextNode(title);//创建文本节点
el1.AppendChild(txt1);//将文本节点添加到元素中
XmlElement el2 = doc.CreateElement("author");//创建"author元素
XmlNode txt2 = doc.CreateTextNode(author);//创建文本节点
el2.AppendChild(txt2);//将文本节点添加到元素中
XmlElement el3 = doc.CreateElement("price");//创建price元素
XmlAttribute attr = doc.CreateAttribute("format");//创建price属性
attr.Value = "人民币";
el3.SetAttributeNode(attr);//将属性赋予元素节点
XmlNode txt3 = doc.CreateTextNode(price);//创建文本节点
el3.AppendChild(txt3);//将文本节点添加到元素中
//将上述元素添加到book元素的子元素
el.AppendChild(el1);
el.AppendChild(el2);
el.AppendChild(el3);
return el;
}
参考:https://blog.csdn.net/baobingji/article/details/90210982