""
包围,标签可以互相嵌套Dom [XmlDocument、XDocument]
(文档对象模型,将整个xml
加载到内存中,然后操作);Sax
(事件驱动,.net
中使用XmlReader(XmlTextReader)
、XmlWriter(XmlTextWriter)
XmlSerializer
(xml
序列化,需要先定义类);Linq To XML(SystemXml.Linq)
,用到的就是Xdocument
,Xelement
等等,XmlSerializer
要求对每种不同的文件都定义一套类,很麻烦,而Linq To XML
则不需要单独创建类,当然更底层一些,代码比XmlSerializer
多,灵活性更高。SystemXml
下的类是2.0及之前操作xml
推荐的,现在很多入也仍然在用这个namespace
下的类,这个namespace
下的类和Linq To XML
非常相似,因此不用单独学核心类XElement
,一个XElement
表示一个元素,new XEiement("order")
,创建一个名学为Order
的标签,调用Add
增加子元素,也是XElement
对象,和TreeView
一样。ToString
XElement
的Save
方法将xml
内容保存在Writer
中XDocument
也可以不用。(直接用XElement
)using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml; namespace XML_Bzhan { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { #region 通过编程的方式实现XML写入 // 1. 在内存中构建一个 Dom 对象 XmlDocument xmlDoc = new XmlDocument(); // 增加一个文档说明 XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes"); xmlDoc.AppendChild(xmlDeclaration); // 为文档增加一个根元素 // 2.1 创建一个根元素 XmlElement rootElement = xmlDoc.CreateElement("school"); xmlDoc.AppendChild(rootElement); // 为根元素增加子元素,接下来增加元素都要将子元素增加到rootElement元素下 XmlElement xmlClassElement = xmlDoc.CreateElement("class"); // 为class增加一个id属性 XmlAttribute attr = xmlDoc.CreateAttribute("id"); attr.Value = "c01"; xmlClassElement.Attributes.Append(attr); rootElement.AppendChild(xmlClassElement); //4.为class元素下创建一个student节点 XmlElement xmlStudentElement = xmlDoc.CreateElement("student"); XmlAttribute attrSid = xmlDoc.CreateAttribute("sid"); attrSid.Value = "s011"; xmlStudentElement.Attributes.Append(attrSid); xmlClassElement.AppendChild(xmlStudentElement); XmlElement xmlNameElement = xmlDoc.CreateElement("name"); xmlNameElement.InnerText = "黄林"; //5.向student节点下增加一个name节点和一个age节点 xmlStudentElement.AppendChild(xmlNameElement); XmlElement xmlAgeElement = xmlDoc.CreateElement("Age"); xmlAgeElement.InnerText = "18"; xmlStudentElement.AppendChild(xmlAgeElement); // 2. 将 Dom 对象写入到 xml 文件中 xmlDoc.Save("school.xml"); MessageBox.Show("OK"); #endregion } } }
写入的 school.xml
文件如下:
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <school> <class id="c01"> <student sid="s011"> <name>黄林</name> <Age>18</Age> </student> </class> </school>
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml; namespace XML_Bzhan { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { #region List 集合循环写入 xml List<Person> list = new List<Person>() { new Person() {Name = "黄玲", Age = 19, Email = "hl@yahoo.com"}, new Person() {Name = "徐正龙", Age = 29, Email = "xzl@yahoo.com"}, new Person() {Name = "何宏伟", Age = 39, Email = "hhw@yahoo.com"}, new Person() {Name = "杨锁", Age = 19, Email = "yangsuo@yahoo.com"}, }; // 1. 创建一个 Dom 对象 XmlDocument xDoc = new XmlDocument(); // 2. 编写文档定义 XmlDeclaration xmlDoc = xDoc.CreateXmlDeclaration("1.0", "utf-8", "yes"); xDoc.AppendChild(xmlDoc); // 3. 编写一个根节点 XmlElement xmlRoot = xDoc.CreateElement("List"); xDoc.AppendChild(xmlRoot); // 4. 循环创建 Person 节点 for (int i = 0; i < list.Count; i++) { // 4.1 创建一个 Person 元素 XmlElement xmlPerson = xDoc.CreateElement("Person"); XmlAttribute xmlAttrId = xDoc.CreateAttribute("id"); xmlAttrId.Value = (i + 1).ToString(); // 将属性添加到 Person 节点中 xmlPerson.Attributes.Append(xmlAttrId); // 创建 Name XmlElement xmlName = xDoc.CreateElement("Name"); xmlName.InnerText = list[i].Name; xmlPerson.AppendChild(xmlName); // 创建 Age XmlElement xmlAge = xDoc.CreateElement("Age"); xmlAge.InnerText = list[i].Age.ToString(); xmlPerson.AppendChild(xmlAge); // 创建 Email XmlElement xmlEmail = xDoc.CreateElement("Email"); xmlEmail.InnerText = list[i].Email; xmlPerson.AppendChild(xmlEmail); // 最后把 Person 加到跟节点之下 xmlRoot.AppendChild(xmlPerson); // 将 Dom 对象写入到 xml 文件中 xDoc.Save("list.xml"); } MessageBox.Show("OK"); #endregion } } public class Person { public string Name { get; set; } public int Age { get; set; } public string Email { get; set; } } }
写入的 List.xml
文件内容:
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <List> <Person id="1"> <Name>黄玲</Name> <Age>19</Age> <Email>hl@yahoo.com</Email> </Person> <Person id="2"> <Name>徐正龙</Name> <Age>29</Age> <Email>xzl@yahoo.com</Email> </Person> <Person id="3"> <Name>何宏伟</Name> <Age>39</Age> <Email>hhw@yahoo.com</Email> </Person> <Person id="4"> <Name>杨锁</Name> <Age>19</Age> <Email>yangsuo@yahoo.com</Email> </Person> </List>
以上的方式是以编程的方式来实现的,写起来比较麻烦。
需添加 using System.Xml.Linq;
命名空间。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml; using System.Xml.Linq; namespace XML_Bzhan { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { #region 通过 XDocument 方式写入 xml 文件 List<Person> list = new List<Person>() { new Person() {Name = "黄玲", Age = 19, Email = "hl@yahoo.com"}, new Person() {Name = "徐正龙", Age = 29, Email = "xzl@yahoo.com"}, new Person() {Name = "何宏伟", Age = 39, Email = "hhw@yahoo.com"}, new Person() {Name = "杨锁", Age = 19, Email = "yangsuo@yahoo.com"}, }; // 1.创建一个 Dom 对象 XDocument xDoc = new XDocument();// 在 using System.Xml.Linq; 命名空间下。 XDeclaration xDec = new XDeclaration("1.0", "utf-8", "no"); //xDoc.Add(xDec); // 这样写不对,会出错误。 xDoc.Declaration = xDec; // 设置 xml 文档的定义 // 2.创建根节点 XElement rootElement = new XElement("List"); xDoc.Add(rootElement); // 3. 循环 List 集合创建 Person 节点 for (int i = 0; i < list.Count; i++) { // 为每个 Person 对想创建一个 Person 元素 XElement xElementPerson = new XElement("Person"); xElementPerson.SetAttributeValue("id", (i + 1).ToString()); xElementPerson.SetElementValue("Name", list[i].Name); xElementPerson.SetElementValue("Age", list[i].Age); xElementPerson.SetElementValue("Email", list[i].Email); rootElement.Add(xElementPerson); } // 4. 保存到文件 xDoc.Save("listNew.xml"); MessageBox.Show("OK"); #endregion } } public class Person { public string Name { get; set; } public int Age { get; set; } public string Email { get; set; } } }
输出的listNew.xml
文件内容:
<?xml version="1.0" encoding="utf-8" standalone="no"?> <List> <Person id="1"> <Name>黄玲</Name> <Age>19</Age> <Email>hl@yahoo.com</Email> </Person> <Person id="2"> <Name>徐正龙</Name> <Age>29</Age> <Email>xzl@yahoo.com</Email> </Person> <Person id="3"> <Name>何宏伟</Name> <Age>39</Age> <Email>hhw@yahoo.com</Email> </Person> <Person id="4"> <Name>杨锁</Name> <Age>19</Age> <Email>yangsuo@yahoo.com</Email> </Person> </List>
可见,是一样的。
kmlDocument document = new XmlDocument(); document.CreateElement(); xxxxxxxx.CreateAttribute();
XElement x = new xxx(); ...Add ();
参考:
1.link-01 // 通过XmlDocument与XDocument方式写入Xml