本人是个菜鸟 基尼天接触到这个问题 比较头痛 经过努力基本明白了    
可能有的人 认为我写的 太小儿科了   我希望这个可以帮助和我一样的菜鸟
<?xml version="1.0" encoding="utf-8"?>
<MESSAGE>
  <MESSAGE_HEAD>
  <MESSAGE_TYPE>AP2</MESSAGE_TYPE>
  <MESSAGE_CREATE_TIME>2010-05-10 14:25:43</MESSAGE_CREATE_TIME>
  <SENDER>0908</SENDER>
  <RECEIVER>0908000000006</RECEIVER>
  </MESSAGE_HEAD>
  <MESSAGE_LIST>
  <BILL_INFO>
  <CUSTOMS_ID>0908</CUSTOMS_ID>
  <SHIP_NAME_EN>JIN MAN HE</SHIP_NAME_EN>
  <VOYAGE_NO>612E</VOYAGE_NO>
  <BILL_NO>DNLJMH0612E800</BILL_NO>
  <FREE_FLAG>1</FREE_FLAG>
  <PER_OP>99999</PER_OP>
  <PER_DATE>2010-05-10 14:25:36</PER_DATE>
  <SOURCE_PLACE>
  </SOURCE_PLACE>
  <DISCHARGE_PLACE>
  </DISCHARGE_PLACE>
  <NOTE>
  </NOTE>
  </BILL_INFO>
    
  </MESSAGE_LIST>
</MESSAGE>这是一个xml文件 c# 怎么能读取到这些标签中的值
方法一:
读到dataset中去 然后按照表进行取值
namespace xml
{
    class Program
    {
        
        static void Main(string[] args)
        {
            //server=localhost;database=gongsi;uid=sa;pwd=sa   @"Data Source=127.0.0.1\SQLEXPRESS;Initial Catalog=gongsi;Integrated Security=True;Pooling=False"
            string connString = "server=localhost;database=gongsi;uid=sa;pwd=sa";
            DataSet ds = new DataSet();
//读进dataset时候是都城了多张表 这个可以根据自己想去那张表进行选择
            ds.ReadXml("E:/AP2-E-81B32E51-7AFE-4417-BABB-D105A388A6E0.xml");
            
            DataTable dt = ds.Tables["BILL_INFO"];            string CUSTOMS_ID = dt.Rows[0]["CUSTOMS_ID"].ToString();
          
            string SHIP_NAME_EN = dt.Rows[0]["SHIP_NAME_EN"].ToString();//行号 和要取的属性名称
            string VOYAGE_NO = dt.Rows[0]["VOYAGE_NO"].ToString();
            string BILL_NO = dt.Rows[0]["BILL_NO"].ToString();
            string FREE_FLAG = dt.Rows[0]["FREE_FLAG"].ToString();
            string PER_OP = dt.Rows[0]["PER_OP"].ToString();
            string PER_DATE = dt.Rows[0]["PER_DATE"].ToString();
            string SOURCE_PLACE = dt.Rows[0]["SOURCE_PLACE"].ToString();
            string DISCHARGE_PLACE = dt.Rows[0]["DISCHARGE_PLACE"].ToString();
            string NOTE = dt.Rows[0]["NOTE"].ToString();
          
方法二
最笨的方法  就是 一个一个节点的去取
类似:
 XmlReader xr = XmlReader.Create(path);
            xr.ReadStartElement("MESSAGE_LIST");
            xr.ReadStartElement("BILL_INFO");
            xr.ReadStartElement("CUSTOMS_ID");
            Console.WriteLine("CUSTOMS_ID节点的内容是:");
            Console.WriteLine(xr.ReadString());
            xr.ReadEndElement();            xr.ReadStartElement("SHIP_NAME_EN");
            Console.WriteLine("SHIP_NAME_EN节点的内容是:");
            Console.WriteLine(xr.ReadString());
            xr.ReadEndElement();            xr.ReadEndElement();
            xr.ReadEndElement();方法三
通过XmlTextReader之类的方法进行取值
类似:
 XmlTextReader xtr = new XmlTextReader(path);            xtr.Read();
            
            while (xtr.Read())
            {
                xtr.MoveToElement();
                Console.WriteLine("name:" + xtr.Name);
                Console.WriteLine("base url:" + xtr.BaseURI);
                Console.WriteLine("local name:" + xtr.LocalName);
                Console.WriteLine("attriribute count:" + xtr.AttributeCount.ToString());
                Console.WriteLine("depth:" + xtr.Depth.ToString());
                Console.WriteLine("line number:" + xtr.LineNumber.ToString());
                Console.WriteLine("node type:" + xtr.NodeType.ToString());
                Console.WriteLine("attribute cout:" + xtr.Value.ToString());
            }
根据这些属性可以取到需要的东西
然后用xtr.MoveToElement();移向像下一条
希望能帮助到和我一样迷茫过的菜鸟们  
                    
        }
    }
}

解决方案 »

  1.   

    XMLDocument doc = doc.Load(@"e:\text.xml");function f(XMLNODE node)
    {
        if(node.childNodes.Length==0)
            document.WriteLine(node.InnerText)
        else
        {
        foreach(XMLNODE n in node.childNodes)
        {
             f(n); 
        }
        }}
      

  2.   

    一般都是先download再读吧。。
      

  3.   

    DataTable dt = new DataTable();
    dt.ReadXML("文件");
    访问对应的行列即可。
      

  4.   

    用switch(node t)
    这种方式效率可能高一些。详细可以搜索一下李天平兄的文章 。