XML文件的读写-------基于DOM的XML文件操作

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值