首页 > 代码库 > XmlReader在未知元素的名称和属性的名称的情况下读取属性
XmlReader在未知元素的名称和属性的名称的情况下读取属性
经过昨天到今天的努力以及博问上好心人的帮助,终于解决了XmlReader在未知元素的名称和属性的名称的情况下读取属性的方法。
在没有解决前,我的代码如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Xml; 6 7 namespace ReadAttribute 8 { 9 class Program10 {11 static void Main(string[] args)12 {13 string path = @"e:\testfile\myMail.xml";14 15 #region 读取属性的第一种方法16 //string date;17 //try18 //{19 // XmlReader xr = XmlReader.Create(path);20 // xr.ReadToFollowing("mail");21 // date = xr.GetAttribute("date");22 // Console.Write("信件的日期为:");23 // Console.WriteLine(date);24 //}25 //catch (Exception ex)26 //{27 // Console.WriteLine(ex.Message);28 //} 29 #endregion30 31 #region 读取属性的第二种方法32 try33 {34 XmlReader xr = XmlReader.Create(path);35 while (xr.Read())36 {37 if (xr.HasAttributes)38 {39 //Console.WriteLine("<" + xr.Name + ">的属性:");40 //for (int i = 0; i < xr.AttributeCount; i++)41 //{ 42 //xr.MoveToAttribute(i); 43 Console.WriteLine("<" + xr.Name + ">的属性:");44 Console.WriteLine("{0}={1}", xr.Name, xr.Value);45 //} 46 }47 }48 }49 catch (Exception ex)50 {51 Console.WriteLine(ex.Message);52 } 53 #endregion54 Console.ReadKey();55 }56 }57 }
解决后,我的代码如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Xml; 6 7 namespace ReadAttribute 8 { 9 class Program10 {11 static void Main(string[] args)12 {13 string path = @"e:\testfile\myMail.xml";14 15 #region 读取属性的第一种方法16 //string date;17 //try18 //{19 // XmlReader xr = XmlReader.Create(path);20 // xr.ReadToFollowing("mail");21 // date = xr.GetAttribute("date");22 // Console.Write("信件的日期为:");23 // Console.WriteLine(date);24 //}25 //catch (Exception ex)26 //{27 // Console.WriteLine(ex.Message);28 //} 29 #endregion30 31 #region 读取属性的第二种方法32 try33 {34 XmlReader xr = XmlReader.Create(path);35 while (xr.Read())36 {37 if (xr.HasAttributes)38 {39 Console.WriteLine("<" + xr.Name + ">的属性:");40 for (int i = 0; i < xr.AttributeCount; i++)41 { 42 xr.MoveToAttribute(i); 43 //Console.WriteLine("<" + xr.Name + ">的属性:");44 Console.WriteLine("{0}={1}", xr.Name, xr.Value);45 } 46 }47 }48 }49 catch (Exception ex)50 {51 Console.WriteLine(ex.Message);52 } 53 #endregion54 Console.ReadKey();55 }56 }57 }
解决后,上面的代码可以不用知道元素的名称和属性的名称的情况下读取XML文件中的所有属性名及其值。这种方法有点像迭代器遍历数组,只不过这里的元素变成了XML的节点和元素,而且这里可以把XML的属性也可以看成是XML的节点(”可以看成XML元素的子节点“),这样元素看成是节点,属性也看成是节点,都当做节点处理,也就是说这个遍历可以看成是遍历XML的节点。这样也就可以解释上面代码中的 xr.Name、xr.Value了,他们分别可以看成是XML的节点名和节点值(即属性名和属性值)。如此,这样的方法便不难理解了!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。