1、向文件中写入XML
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
XmlDocument xmlDoc = new XmlDocument();//在内存中构建一个Dom对象 XmlDeclaration xmld = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes");//指定文档声明 xmlDoc.AppendChild(xmld);//将文档说明添加到文档中去 XmlElement rootElement = xmlDoc.CreateElement("school");//创建一个根元素,school xmlDoc.AppendChild(rootElement);//将根元素加入进去 XmlElement xmlClassElement = xmlDoc.CreateElement("class");//为根元素(school)添加子元素 XmlAttribute attr = xmlDoc.CreateAttribute("id");//为class添加属性 id, attr.Value = "c01";//id的值为c01 xmlClassElement.Attributes.Append(attr);//将属性添加到class标签中去。 rootElement.AppendChild(xmlClassElement);//将class元素添加到school标签中去 XmlElement xmlStudentElement = xmlDoc.CreateElement("student");//创建一个student元素 attr = xmlDoc.CreateAttribute("sid");//创建一个名叫sid的属性 attr.Value = "s011";//属性的值为s011 xmlStudentElement.Attributes.Append(attr); //将属性添加到元素中去 xmlClassElement.AppendChild(xmlStudentElement);//将student节点加到class节点中去 XmlElement xmlNameElement = xmlDoc.CreateElement("name"); xmlNameElement.InnerText = "james"; XmlElement xmlAgeElement = xmlDoc.CreateElement("age"); xmlAgeElement.InnerText = "18"; xmlStudentElement.AppendChild(xmlNameElement); xmlStudentElement.AppendChild(xmlAgeElement); xmlDoc.Save("school.xml");//将该Dom对象写入到XML文件中
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
XDocument xDoc = new XDocument();//创建一个Dom对象 XDeclaration xDeclaration = new XDeclaration("1.0", "utf-8", null);//声明文档类型 xDoc.Declaration = xDeclaration;//添加文档类型 XElement rootElement = new XElement("school");//创建根节点 xDoc.Add(rootElement);//将school节点添加进文档中 XElement xClass = new XElement("class");//创建一个class元素 xClass.SetAttributeValue("id", "c01");//为class标签添加属性和值。 rootElement.Add(xClass); XElement student = new XElement("student"); student.SetAttributeValue("id", "s001");//为student节点设置属性 student.SetElementValue("Name", "curry");//在student节点中,添加叶子节点Name,值为curry student.SetElementValue("age", 17);//在student节点中,添加叶子节点age,值为17 student.SetElementValue("sex", "male");//在student节点中,添加叶子节点sex,值为male xClass.Add(student);//将student节点添加到class节点中去。 xDoc.Save("xuexiao.xml");//如果这个文件不存在,那么就会创建一个并写入内容。如果这个文件存在,那么就会覆盖掉内容。
2、从文件中读取XML
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
XmlDocument document = new XmlDocument();//将xml文件加载进来 document.Load("xuexiao.xml");//将xml文件加载到对象上 XmlElement rootElement = document.DocumentElement;//获取根节点。 //rootElement.Name;//获取节点的名字 foreach (XmlNode item in rootElement.ChildNodes)//遍历根节点下的所有节点(包括注释……等,这些节点有些是实际上用不着的,所有下面需要进行判断) { if (item.NodeType == XmlNodeType.Element) {//判断当前节点的类型是否是元素节点 string nodeName = item.Name;//获取当前节点的名称 } else if (item.NodeType == XmlNodeType.Text | item.NodeType == XmlNodeType.CDATA) { string text = item.InnerText; } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
XDocument document = XDocument.Load(@"xuexiao.xml");//加载XML文件 XElement rootElement = document.Root;//获取根节点 rootElement.Elements();//获取当前根节点下的所有子元素。如果在elements中增加"class",那么就表明要获取当前节点下的,所有名字叫class的元素 rootElement.Element("class");//获取当前节点下的,名字叫class的子元素 //遍历根节点下的所有子元素 foreach (XElement item in rootElement.Elements()) { string nodeName = item.Name.ToString();//获取节点的名字 item.Attributes();//属性 if (item.Elements().Count() == 0) { //如果该节点下没有子节点了。那么就去找该节点的value值 string valStr = item.Value; } } //xml中获取某节点 (3.5以后) //获取根节点中,名字叫class的节点,并且这些class的节点的ID都大于10 IEnumerable<XElement> items = rootElement.Descendants("class").Where(x => Convert.ToInt32(x.Attribute("id").Value) > 10);
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public List<ViewModelSelect> GetFunctionNameWithXML(string strPath) { List<ViewModelSelect> listVms = new List<ViewModelSelect>(); XDocument document = XDocument.Load(strPath);//加载XML文件 XElement rootElement = document.Root;//获取根节点 GetXElement(rootElement, ref listVms); return listVms; } private void GetXElement(XElement root, ref List<ViewModelSelect> listVms) { //返回IEnumerable接口的对象,都可以实现foreach循环遍历 foreach (XElement element in root.Elements()) { //递归 if (element.Elements().Count() > 0) { GetXElement(element, ref listVms); } else { ViewModelSelect vms = new ViewModelSelect(); vms.ModelName = element.Value; vms.Fac = element.FirstAttribute.Value; listVms.Add(vms); } } }
如果xml文件是导航节点,那么在获取到根节点之后,写一个递归,然后调用递归就可以了。