<?xml version="1.0" encoding="gbk" ?> 
- <humans>
- <human>
  <NO>1</NO> 
  <Name>CSDN</Name> 
  <sr>1988/05/05</sr> 
  <Sex>男</Sex> 
  </human>
- <human>
  <NO>2</NO> 
  <Name>王羲之</Name> 
  <sr>1988/05/05</sr> 
  <Sex>男</Sex> 
  </human>
- <human>
  <NO>3</NO> 
  <Name>马云</Name> 
  <sr>1988/04/05</sr> 
  <Sex>男</Sex> 
  </human>
  </humans>怎么依次获取No,Name,sr和sex的值,比如加到List中

解决方案 »

  1.   

    XmlReader和XmlTextReader类定义在System.XML名字空间中。 
    XmlTextReader类源于XmlReader类。XmlTextReader类可用来读取XML文档。此类的Read方法读取此文档,直到其节点结束。 在这篇文章里,将演示如何使用XmlTextReader类来读取一个XML文档及输出数据到控制台。 加入名字空间引用 因为Xml类都定义在System.Xml名字空间当中,所以首先要做的是在工程里加入对System.Xml的引用。 using System.Xml; 打开一个XML文档 XmlTextReader类的构造器打开一个XML文件。在这个例子里使用了一个名为xmltest.xml的文件,它保存在C:\temp目录当中。你可以下载此附件。 // 打开一个 XML 文件
    XmlTextReader reader = new XmlTextReader("C:\\temp\\xmltest.xml"); 读取数据 XmlTextReader类的Read方法读取数据。 while ( reader.Read() )
    {
    Console.WriteLine(reader.Name);
    } 源代码:
    附件
    CS Code
    XML文件 namespace ReadXML
    {
    using System;
    using System.Xml; public static int Main(string[] args)
    {
    try
    {
    // 打开一个 XML 文件
    XmlTextReader reader = new XmlTextReader("C:\\temp\\xmltest.xml");
    while ( reader.Read() )
    {
    Console.WriteLine(reader.Name);
    }}
    catch (Exception e)
    {
    Console.WriteLine ("Exception: {0}", e.ToString());
    }
    return 0;
    }
    }
    }
      

  2.   

    关键是怎么样获取各个节点的值呢,比如说NO和Name。
      

  3.   

    命名空间:System.Xml
    Dom方法:XmlDocument类(Dom树)
    另一种(忘记名了):xmltextreader(顺序读节点)
      

  4.   

     C#读取XML文件内容并以列表方式显示 http://www.codefans.net/soft/4140.shtml  这个地方有把它加到列表中的,要下载的
      

  5.   

    取到要取属性的节点  用XmlNode或者XmlElement表示
    然后可以用node.Attributes[name]或者ele.GetAttribute()获取
      

  6.   

    List<yourEntity> yourList = new List<yourEntity>();
    XmlDocument doc = new XmlDocument();
                doc.LoadXml("<?xml version=\"1.0\" encoding=\"gbk\" ?> <humans><human><NO>1</NO>    <Name>CSDN</Name>    <sr>1988/05/05</sr>    <Sex>男</Sex>    </human> <human>  <NO>2</NO>    <Name>王羲之</Name>    <sr>1988/05/05</sr>    <Sex>男</Sex>    </human> <human>  <NO>3</NO>    <Name>马云</Name>    <sr>1988/04/05</sr>    <Sex>男</Sex>    </human>  </humans>");
                XmlNodeList nl = doc.SelectNodes("/humans/human");
                foreach (XmlNode x in nl)
                {
    //如果XML顺序完全和上面一样可以用childNodex[x]的方式,否则请再用xpath语法选择
    yourList.add(new yourEntity(){NO = x.childNodes[0].innerText,name=x.childNodes[1].innerText,.....})
                }未经测试
      

  7.   

    static void Main(string[] args)
            {
                List<Human> humans = new List<Human>();
                XmlDocument doc = new XmlDocument();
                doc.Load("test.xml");
                XmlNode nodes = doc.DocumentElement;
                foreach (XmlNode node in nodes.ChildNodes)
                {
                    Human human = new Human();
                    foreach (XmlNode node1 in node)
                    {
                        switch (node1.Name)
                        {
                            case "NO":
                                human.NO = Convert.ToInt32(node1.InnerText);
                                break;
                            case "Name":
                                human.Name = node1.InnerText;
                                break;
                            case "sr":
                                human.Sr = node1.InnerText;
                                break;
                            case "Sex":
                                human.Sex = node1.InnerText;
                                break;
                        }
                        
                    }
                    humans.Add(human);
                }
                foreach (Human human in humans)
                {
                    Console.Write(human.NO + " ");
                    Console.Write(human.Name + " ");
                    Console.Write(human.Sr + " ");
                    Console.Write(human.Sex + " ");
                    Console.WriteLine();
                }
                Console.Read();
            }human类
    class Human
        {
            public int NO { get; set; }
            public string Name { get; set; }
            public string Sr { get; set; }
            public string Sex { get; set; }
        }
      

  8.   

    引申一下:
    如果我有这样的List包含了上面人员的信息,在修改或者添加了之后,如果再写入到XML中??
    望大家不吝赐教
      

  9.   

    谢谢XHDDD111,已经可以读取了
      

  10.   

    string xml="<?xml version=\"1.0\" encoding=\"gb2312\" ?> \r\n<humans> \r\n";
                foreach (Human human3 in humans)
                {
                    xml += "<human> \r\n";
                    xml += "<NO>" + human3.NO + "</NO> \r\n";
                    xml += "<Name>" + human3.Name + "</Name> \r\n";
                    xml += "<sr>" + human3.Sr + "</sr> \r\n";
                    xml += "<Sex>" + human3.Sex + "</Sex> \r\n";
                    xml += "</human> \r\n";
                }
                xml += "</humans>";            FileStream fs = new FileStream("test.xml",FileMode.Create, FileAccess.Write);
                StreamWriter sw = new StreamWriter(fs);
                sw.WriteLine(xml);
                sw.Close();
                fs.Close();
      

  11.   

    像这样的格式刚好可以用
    DataSet的ReadXML呀
    或者是DataTable的ReadXML
    DataTable dt=new DataTable();
    dt.ReadXml("XML绝对路径");
    试第一行数据如下
    dt.Rows[0]["NO"]
    dt.Rows[0]["Name"]
    dt.Rows[0]["sr"]
    dt.Rows[0]["Sex"]以上参考希望对楼主有帮忙
      

  12.   

    if (File.Exists("test.xml"))
                    File.Delete("test.xml");
                XmlDocument xDoc = new XmlDocument();
                XmlNode nodeIn = xDoc.CreateNode(XmlNodeType.XmlDeclaration, "1.0", "gb2312");
                xDoc.AppendChild(nodeIn);
                XmlElement xmlRoot = xDoc.CreateElement("", "humans", "");
                xDoc.AppendChild(xmlRoot);
                foreach(Human human4 in humans)
                {
                    XmlElement xmlChild = xDoc.CreateElement("", "human", "");
                    xmlRoot.AppendChild(xmlChild);
                    XmlElement xmlelem1 = xDoc.CreateElement("", "NO", "");
                    XmlText xmlText1 = xDoc.CreateTextNode(human4.NO.ToString()); 
                    xmlelem1.AppendChild(xmlText1);
                    xmlChild.AppendChild(xmlelem1);                XmlElement xmlelem2 = xDoc.CreateElement("", "Name", "");
                    XmlText xmlText2 = xDoc.CreateTextNode(human4.Name);
                    xmlelem2.AppendChild(xmlText2);
                    xmlChild.AppendChild(xmlelem2);                XmlElement xmlelem3 = xDoc.CreateElement("", "sr", "");
                    XmlText xmlText3 = xDoc.CreateTextNode(human4.Sr);
                    xmlelem3.AppendChild(xmlText3);
                    xmlChild.AppendChild(xmlelem3);                XmlElement xmlelem4 = xDoc.CreateElement("", "Sex", "");
                    XmlText xmlText4 = xDoc.CreateTextNode(human4.Sex);
                    xmlelem4.AppendChild(xmlText4);
                    xmlChild.AppendChild(xmlelem4);
                }
                xDoc.Save("test.xml");原来是这样创建
      

  13.   

    XmlTextWriter xw = new XmlTextWriter("test.xml", Encoding.UTF8);
                xw.Formatting = Formatting.Indented;
                xw.WriteStartDocument();
                xw.WriteStartElement("humans");
                foreach(Human human4 in humans)
                {
                    xw.WriteStartElement("human");
                    xw.WriteElementString("NO",human4.NO.ToString());
                    xw.WriteElementString("Name", human4.Name);
                    xw.WriteElementString("sr", human4.Sr);
                    xw.WriteElementString("Sex", human4.Sex);
                    xw.WriteEndElement();
                }
                xw.WriteEndElement();
                xw.WriteEndDocument();
                xw.Flush();
                xw.Close();这样更简单点
      

  14.   


    VS自身自带的方法不是每个都差,但在读取文件方面还是很快的,
    你可试试,
    一个是经XML类读取出来然后一个结点一个结点的去读取还是
    DataTable里一行一行的去访问快,两种都试一下也可以提搞自己的水平
      

  15.   

    谢谢大家!!!非常感谢!!!
    特别感谢xhddd111!!