关于XML文件的用法,本文简单介绍创建、读取和增删操作 。
1.创建有三种方法
(1)通过XmlDocument创建,然后分级添加子目录
XmlDocument doc = new XmlDocument(); XmlElement root = doc.CreateElement("album"); // 创建根节点 root.SetAttribute("name", "album1"); // 设置属性 doc.AppendChild(root); // 加入到xml document XmlElement preview = doc.CreateElement("Preview"); // 创建preview元素 preview.SetAttribute("path", "album1"); preview.SetAttribute("extension", "xpi"); preview.SetAttribute("sizew", "680"); // 设置属性 preview.SetAttribute("sizeh", "474"); preview.SetAttribute("totalpage", "25"); root.AppendChild(preview); // 添加到xml document XmlElement page = doc.CreateElement("Page"); page.SetAttribute("id", "0"); page.SetAttribute("text", "封面"); page.SetAttribute("bgimg", "fm.xpi"); page.SetAttribute("sizew", "680"); page.SetAttribute("sizeh", "474"); page.SetAttribute("totalphoto", "2"); preview.AppendChild(page); XmlElement photo1 = doc.CreateElement("Photo"); photo1.SetAttribute("id", "0"); photo1.SetAttribute("x", "0"); photo1.SetAttribute("y", "0"); photo1.SetAttribute("minw", "5029"); photo1.SetAttribute("minh", "3504"); photo1.SetAttribute("pwidth", "680"); photo1.SetAttribute("pheight", "474"); photo1.SetAttribute("image", "hard_cover_color.xpi"); page.AppendChild(photo1); XmlElement photo2 = doc.CreateElement("Photo"); photo2.SetAttribute("id", "1"); photo2.SetAttribute("x", "138"); photo2.SetAttribute("y", "117"); photo2.SetAttribute("minw", "3155"); photo2.SetAttribute("minh", "1925"); photo2.SetAttribute("pwidth", "406"); photo2.SetAttribute("pheight", "243"); photo2.SetAttribute("image", "sampleS.xpi"); page.AppendChild(photo2); //保存 doc.Save(@"album1.xml");
doc是新建的XML文件,然后CreatElement(album)创建XML内部成员,通过SetAttribute设置其属性,在设置属性后将album添加到doc中(doc.AppendChild),这样就在doc中完整添加了一个根目录。在再次CreatElement时,根据其AppendChild的对象位置可以设置其是哪级目录下。
(2)创建XML文件后直接通过文本形式Load其内部内容
XmlDocument xmldoc = new XmlDocument(); //创建空的XML文档 xmldoc.LoadXml("<?xml version='1.0' encoding='gb2312'?>" + "<bookstore>" + "<book genre='fantasy' ISBN='2-3631-4'>" + "<title>Oberon's Legacy</title>" + "<author>Corets, Eva</author>" + "<price>5.95</price>" + "</book>" + "</bookstore>"); xmldoc.Save("bookstore2.xml"); //保存
(3)此方式是较为完整的创建方法,其内部各属性参数设置全面
XmlText xmltext; XmlDocument xmldoc = new XmlDocument(); //加入XML的声明段落 XmlNode xmlnode = xmldoc.CreateXmlDeclaration("1.0", "gb2312", null); xmldoc.AppendChild(xmlnode); //加入一个根元素 XmlElement xmlelem = xmldoc.CreateElement("", "bookstore", ""); xmltext = xmldoc.CreateTextNode("1111"); xmlelem.AppendChild(xmltext); xmldoc.AppendChild(xmlelem); //加入一个子元素 XmlElement xmlelem1 = xmldoc.CreateElement("", "book", ""); xmltext = xmldoc.CreateTextNode("2222"); xmlelem1.AppendChild(xmltext); //为子元素"book"增加两个属性 xmlelem1.SetAttribute("genre", "", "fantasy"); xmlelem1.SetAttribute("ISBN", "2-3631-4"); xmldoc.ChildNodes.Item(1).AppendChild(xmlelem1); //创建三个子元素的子元素 XmlElement xmlelem2 = xmldoc.CreateElement("", "title", ""); xmltext = xmldoc.CreateTextNode("Oberon's Legacy"); xmlelem2.AppendChild(xmltext); xmldoc.ChildNodes.Item(1).AppendChild(xmlelem1).AppendChild(xmlelem2); XmlElement xmlelem3 = xmldoc.CreateElement("", "author", ""); xmltext = xmldoc.CreateTextNode("Corets, Eva"); xmlelem3.AppendChild(xmltext); xmldoc.ChildNodes.Item(1).AppendChild(xmlelem1).AppendChild(xmlelem3); XmlElement xmlelem4 = xmldoc.CreateElement("", "price", ""); xmltext = xmldoc.CreateTextNode("5.95"); xmlelem4.AppendChild(xmltext); xmldoc.ChildNodes.Item(1).AppendChild(xmlelem1).AppendChild(xmlelem4); xmldoc.Save("bookstore.xml"); //保存 showcontent.Text = ""; showcontent.Text = xmldoc.InnerXml;
2.打开XML文件,两种方式
(1)通过新建一个XML文件然后Load打开
XmlDocument xmldoc= new XmlDocument(); xmldoc.Load("album1.xml"); showcontent.Text = ""; showcontent.Text = xmldoc.InnerXml;
(2)通过XmlTextReader新建
XmlTextReader reader = new XmlTextReader("album1.xml"); while (reader.Read()) MessageBox.Show(reader.Name); reader.Close();
记得在结尾做Close()。
3.寻找和插入节点。
(1)通过属性匹配找到需要的节点,然后增加新的节点
XmlDocument xmldoc = new XmlDocument(); xmldoc.Load("album1.xml"); XmlElement root = xmldoc.DocumentElement; //查找结点 增加新的子节点 foreach (XmlNode item in root.ChildNodes) { if (item.Attributes["sizeh"].Value == "474") { XmlElement photo2 = xmldoc.CreateElement("photo01"); photo2.SetAttribute("id", "1"); photo2.SetAttribute("x", "138"); photo2.SetAttribute("y", "117"); photo2.SetAttribute("minw", "3155"); photo2.SetAttribute("minh", "1925"); photo2.SetAttribute("pwidth", "406"); photo2.SetAttribute("pheight", "243"); photo2.SetAttribute("image", "sampleS.xpi"); item.AppendChild(photo2); xmldoc.Save(@"album02.xml");
4.寻找和删除节点
(1)和上面相似,通过foreach查找,找到属性相对应的节点然后remove()
XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(@"album1.xml"); XmlElement root = xmldoc.DocumentElement; // 查找结点 增加新的子节点 foreach (XmlNode item in root.ChildNodes) { if (item.Attributes["sizeh"].Value == "474") { item.RemoveAll(); xmldoc.Save(@"album02.xml"); } }
(2)获取节点列表,然后通过Foreach查找其需求(Photo)相对应的选项remove()
XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(@"album1.xml"); XmlNodeList nodelist = xmldoc.SelectSingleNode("album").ChildNodes; //找到根节点,并读出其子节点列表 foreach (XmlNode xn in nodelist) { XmlElement xel = (XmlElement)xn; XmlNodeList node = xel.GetElementsByTagName("Photo"); if (node.Count > 0) { if (node[0].InnerText == "") xel.RemoveAll(); //break; } } xmldoc.Save(@"album02.xml");
写在最后,上述这些关于XML的操作是通过百度得来的点点滴滴,然后总结得来的,有的因为自己偷懒还把原作者的例子也搬来了,只是整理的时间有些长,导致原作者的博客地址没有保存到,所以没有标记声明原作者内容,在此道歉。
第一次写博客,目的是整理所学到的,分享给大家借鉴。有错的地方,麻烦指正。