美文网首页
XmlReader在未知元素的名称和属性的名称的情况下读取属性

XmlReader在未知元素的名称和属性的名称的情况下读取属性

作者: JackRo | 来源:发表于2016-06-15 09:54 被阅读250次

    经过努力,终于解决了XmlReader在未知元素的名称和属性的名称的情况下读取属性的方法。在没有解决前,我的代码如下:

        using System; 
        using System.Collections.Generic; 
        using System.Linq; 
        using System.Text; 
        using System.Xml; 
        
        namespace ReadAttribute 
        { 
            class Program
             {
                 static void Main(string[] args)
                 {
                     string path = @"e:\testfile\myMail.xml";
                     
                     #region 读取属性的第一种方法
                     //string date;
                     //try
                     //{
                     //    XmlReader xr = XmlReader.Create(path);
                     //    xr.ReadToFollowing("mail");
                     //    date = xr.GetAttribute("date");
                     //    Console.Write("信件的日期为:");
                     //    Console.WriteLine(date);
                     //}
                     //catch (Exception ex)
                     //{
                     //    Console.WriteLine(ex.Message);
                     //} 
                     #endregion
         
                     #region 读取属性的第二种方法
                     try
                     {
                         XmlReader xr = XmlReader.Create(path);
                         while (xr.Read())
                         {
                             if (xr.HasAttributes)
                             {
                                 //Console.WriteLine("<" + xr.Name + ">的属性:");
                                 //for (int i = 0; i < xr.AttributeCount; i++)
                                 //{                            
                                 //xr.MoveToAttribute(i);                            
                                 Console.WriteLine("<" + xr.Name + ">的属性:");
                                 Console.WriteLine("{0}={1}", xr.Name, xr.Value);
                                 //}                                                                  
                             }
                         }
                     }
                     catch (Exception ex)
                     {
                         Console.WriteLine(ex.Message);
                     } 
                     #endregion
                     Console.ReadKey();
                 }
             }
         }
    

    解决后,我的代码如下:

         using System; 
        using System.Collections.Generic; 
        using System.Linq; 
        using System.Text; 
        using System.Xml; 
        
         namespace ReadAttribute 
        { 
            class Program
             {
                 static void Main(string[] args)
                 {
                     string path = @"e:\testfile\myMail.xml";
                     
                     #region 读取属性的第一种方法
                     //string date;
                     //try
                     //{
                     //    XmlReader xr = XmlReader.Create(path);
                     //    xr.ReadToFollowing("mail");
                     //    date = xr.GetAttribute("date");
                     //    Console.Write("信件的日期为:");
                     //    Console.WriteLine(date);
                     //}
                     //catch (Exception ex)
                     //{
                     //    Console.WriteLine(ex.Message);
                     //} 
                     #endregion
         
                     #region 读取属性的第二种方法
                     try
                     {
                         XmlReader xr = XmlReader.Create(path);
                         while (xr.Read())
                         {
                             if (xr.HasAttributes)
                             {
                                 Console.WriteLine("<" + xr.Name + ">的属性:");
                                 for (int i = 0; i < xr.AttributeCount; i++)
                                 {                            
                                 xr.MoveToAttribute(i);                           43                         //Console.WriteLine("<" + xr.Name + ">的属性:");
                                 Console.WriteLine("{0}={1}", xr.Name, xr.Value);
                                 }                                                46                     }
                         }
                     }
                     catch (Exception ex)
                     {
                         Console.WriteLine(ex.Message);
                     } 
                     #endregion
                     Console.ReadKey();
                 }
             }
         }
    

    解决后,上面的代码可以不用知道元素的名称和属性的名称的情况下读取XML文件中的所有属性名及其值。这种方法有点像迭代器遍历数组,只不过这里的元素变成了XML的节点和元素,而且这里可以把XML的属性也可以看成是XML的节点(”可以看成XML元素的子节点“),这样元素看成是节点,属性也看成是节点,都当做节点处理,也就是说这个遍历可以看成是遍历XML的节点。这样也就可以解释上面代码中的 xr.Name、xr.Value了,他们分别可以看成是XML的节点名和节点值(即属性名和属性值)。如此,这样的方法便不难理解了!

    相关文章

      网友评论

          本文标题:XmlReader在未知元素的名称和属性的名称的情况下读取属性

          本文链接:https://www.haomeiwen.com/subject/geaudttx.html