public static DataSet ConvertXMLFileToDataSet(string xmlFile)
        {
            StringReader stream = null;
            XmlTextReader reader = null;
            try
            {
                XmlDocument xmld = new XmlDocument();
                xmld.Load(xmlFile);                DataSet xmlDS = new DataSet();
                stream = new StringReader(xmld.InnerXml);
                //从stream装载到XmlTextReader
                reader = new XmlTextReader(stream);
                xmlDS.ReadXml(reader);
                //xmlDS.ReadXml(xmlFile);
                return xmlDS;
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (reader != null)
                    reader.Close();
            }
        }  private void button23_Click(object sender, EventArgs e)
      {
          DataSet dt = ConvertXMLFileToDataSet("3.xml");      
          for (int i = 0; i < dt.Tables["Data"].Rows.Count; i++)
          {
              textBox1.Text+= dt.Tables["Data"].Rows[i]["CorpOrderID"].ToString()+"\n\r";
          }      }  
  
 

解决方案 »

  1.   


                System.Xml.Linq.XDocument doc = System.Xml.Linq.XDocument.Load("e:\\1.txt");
                foreach (var employee in doc.Document.Descendants("DataField").First().Descendants("Data"))
                {
                    MessageBox.Show(employee.Attribute("CorpOrderID").Value);
                }
      

  2.   

    2楼说的太好了,请问我想在 <Data Code="81143900028040405694" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />这行最后边加一个属性ToCorpID="000003202879"怎么写呀???
      

  3.   

    路过.......[align=center]*****************************
    * 本内容使用CSDN 小秘书回复 *
    每天回帖即可得10分可用分! *
    *****************************[/align]
      

  4.   

                XElement element = XElement.Load(@"c:\1.xml");            var query = element.Descendants("DataField").Descendants("Data").
                    Where(x => (string)x.Attribute("Code") == "81143900028040405694").FirstOrDefault();
                if (query != null)
                {
                    query.SetAttributeValue("ToCorpID", "000003202879");
                }
      

  5.   

                XElement element = XElement.Load(@"c:\1.xml");            var query = element.Descendants("DataField").Descendants("Data").
                    Where(x => (string)x.Attribute("Code") == "81143900028040405694").FirstOrDefault();
                if (query != null)
                {
                    query.SetAttributeValue("ToCorpID", "000003202879");
                }

    同去加一句:
    element.Save(@"c:\1.xml");
      

  6.   

                XElement element = XElement.Load(@"c:\1.xml");            var query = element.Descendants("DataField").Descendants("Data").
                    Where(x => (string)x.Attribute("Code") == "81143900028040405694").FirstOrDefault();
                if (query != null)
                {
                    query.SetAttributeValue("ToCorpID", "000003202879");
                }

    7楼说的没错,不过我想把
    <Data Code="81143900028040251957" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027511806124" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027510453880" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027509255484" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027508057635" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027508204343" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027509403677" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027510601766" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027511950686" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900028040405694" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
    这几行后边全加上ToCorpID="000003202879"属性,怎么写个循环呀?
      

  7.   

                XElement element = XElement.Load(@"c:\1.xml");            var query = element.Descendants("DataField").Descendants("Data").
                    Where(x => (string)x.Attribute("Code") == "81143900028040405694").FirstOrDefault();
                if (query != null)
                {
                    query.SetAttributeValue("ToCorpID", "000003202879");
                }

    7楼说的没错,不过我想把
    <Data Code="81143900028040251957" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027511806124" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027510453880" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027509255484" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027508057635" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027508204343" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027509403677" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027510601766" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027511950686" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900028040405694" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
    这几行后边全加上ToCorpID="000003202879"属性,怎么写个循环呀?你指的节点 DataField 下面所有的Data节点都要加吗?
      

  8.   

    如果没有条件限制,所有Data节点下面都添加一个属性,把条件取消掉就可以了。参考:            XElement element = XElement.Load(@"c:\1.xml");             element.Descendants("DataField").Descendants("Data").ToList()
                    .ForEach(item => { item.SetAttributeValue("ToCorpID", "000003202879"); });
      

  9.   

    11楼谢谢啦,还有最后一个问题,我现在有好几个这种文件,像1.xml,2.xml,3.xml,4.xml,5.xml,里面的结构都是一样的,我想把这个文件的
    <Data Code="81143900028040251957" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027511806124" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027510453880" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027509255484" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027508057635" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027508204343" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027509403677" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027510601766" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900027511950686" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
            <Data Code="81143900028040405694" ReplaceCode="" CorpOrderID="138204" Actor="1" ActDate="2013-12-19 08:47:09" WrongCode="" UpperCorpOrderID="" />
    后边全部加上ToCorpID="000003202879"属性怎么写呀?
      

  10.   


     for (int i=1;i<6;i++
    {
           XElement element = XElement.Load(@"c:\"+i+".xml"); 
                 element.Descendants("DataField").Descendants("Data").ToList()
                    .ForEach(item => { item.SetAttributeValue("ToCorpID", "000003202879"); });
    }
      

  11.   

     for (int i=1;i<6;i++)
    {
           XElement element = XElement.Load(@"c:\"+i+".xml"); 
                 element.Descendants("DataField").Descendants("Data").ToList()
                    .ForEach(item => { item.SetAttributeValue("ToCorpID", "000003202879"); });
    }
      

  12.   

    加上保存:
     for (int i=1;i<6;i++)
    {
           XElement element = XElement.Load(@"c:\"+i+".xml"); 
                 element.Descendants("DataField").Descendants("Data").ToList()
                    .ForEach(item => { item.SetAttributeValue("ToCorpID", "000003202879"); });
            element.Save(@"c:\"+i+".xml");
    }
      

  13.   

    这个方法对规则文件名有用,不过我这的都是不规则的文件名呀!都是这样的:
    SalesWareHouseOut_138375.xml,SalesWareHouseOut_138402.xml,SalesWareHouseOut_138404.xml,SalesWareHouseOut_138405.xml,SalesWareHouseOut_138411.xml,而且有几百个,怎么弄呀?
      

  14.   

    那没有关系,读取目录下的所有xml文件就可
      

  15.   

    这个方法对规则文件名有用,不过我这的都是不规则的文件名呀!都是这样的:
    SalesWareHouseOut_138375.xml,SalesWareHouseOut_138402.xml,SalesWareHouseOut_138404.xml,SalesWareHouseOut_138405.xml,SalesWareHouseOut_138411.xml,而且有几百个,怎么弄呀?比如你在搜索C盘下面的XML文件,只需要
    string[] _files = Directory.GetFiles("C:\\", "*.xml");
    然后在遍历就好了。
      

  16.   

     DirectoryInfo dir = new DirectoryInfo(Application.StartupPath+@"\\" );         
              FileInfo[] fileInfo = dir.GetFiles("*.xml");  
               foreach (FileSystemInfo f in fileInfo)
                {
                    XElement element = XElement.Load(f.FullName);
                    element.Descendants("DataField").Descendants("Data").ToList()
                       .ForEach(item => { item.SetAttributeValue("ToCorpID", "000003202879"); });
                    element.Save(f.FullName);
                    
                    
                }
      

  17.   

    这个方法对规则文件名有用,不过我这的都是不规则的文件名呀!都是这样的:
    SalesWareHouseOut_138375.xml,SalesWareHouseOut_138402.xml,SalesWareHouseOut_138404.xml,SalesWareHouseOut_138405.xml,SalesWareHouseOut_138411.xml,而且有几百个,怎么弄呀?比如你在搜索C盘下面的XML文件,只需要
    string[] _files = Directory.GetFiles("C:\\", "*.xml");
    然后在遍历就好了。
            private void ShowSchemaButton_Click(object sender, EventArgs e)
            {
                string[] files = Directory.GetFiles(@"C:\Users\Administrator\Desktop\销售单", "*.xml");//获取目录下所有文件名
                foreach (string dir in files)//遍历所有文件名
                {
                    XElement element = XElement.Load(dir);
                    element.Descendants("DataField").Descendants("Data").ToList().ForEach(item => { item.SetAttributeValue("ToCorpID", "000003202879"); });
                    element.Save(dir);
                }
            }
    这么些对不对呀?怎么运行后没反应?
      

  18.   

    这个方法对规则文件名有用,不过我这的都是不规则的文件名呀!都是这样的:
    SalesWareHouseOut_138375.xml,SalesWareHouseOut_138402.xml,SalesWareHouseOut_138404.xml,SalesWareHouseOut_138405.xml,SalesWareHouseOut_138411.xml,而且有几百个,怎么弄呀?比如你在搜索C盘下面的XML文件,只需要
    string[] _files = Directory.GetFiles("C:\\", "*.xml");
    然后在遍历就好了。
            private void ShowSchemaButton_Click(object sender, EventArgs e)
            {
                string[] files = Directory.GetFiles(@"C:\Users\Administrator\Desktop\销售单", "*.xml");//获取目录下所有文件名
                foreach (string dir in files)//遍历所有文件名
                {
                    XElement element = XElement.Load(dir);
                    element.Descendants("DataField").Descendants("Data").ToList().ForEach(item => { item.SetAttributeValue("ToCorpID", "000003202879"); });
                    element.Save(dir);
                }
            }
    这么些对不对呀?怎么运行后没反应?
    你看你的文件,数据已添加了
      

  19.   

    这个方法对规则文件名有用,不过我这的都是不规则的文件名呀!都是这样的:
    SalesWareHouseOut_138375.xml,SalesWareHouseOut_138402.xml,SalesWareHouseOut_138404.xml,SalesWareHouseOut_138405.xml,SalesWareHouseOut_138411.xml,而且有几百个,怎么弄呀?比如你在搜索C盘下面的XML文件,只需要
    string[] _files = Directory.GetFiles("C:\\", "*.xml");
    然后在遍历就好了。
            private void ShowSchemaButton_Click(object sender, EventArgs e)
            {
                string[] files = Directory.GetFiles(@"C:\Users\Administrator\Desktop\销售单", "*.xml");//获取目录下所有文件名
                foreach (string dir in files)//遍历所有文件名
                {
                    XElement element = XElement.Load(dir);
                    element.Descendants("DataField").Descendants("Data").ToList().ForEach(item => { item.SetAttributeValue("ToCorpID", "000003202879"); });
                    element.Save(dir);
                }
            }
    这么些对不对呀?怎么运行后没反应?
    你看你的文件,数据已添加了
    运行没问题了,还有个问题,我想读取SalesWareHouseOut_138375.xml,SalesWareHouseOut_138402.xml,SalesWareHouseOut_138404.xml,SalesWareHouseOut_138405.xml,SalesWareHouseOut_138411.xml,这几个文件中的CorpOrderID属性怎么写呀?是不是和添加的类似?
      

  20.   

    你稍微看一下上面的代码也基本明白怎么写了吧。
    就算你不看一下上面的代码,你也自己练习一下读写XML啊。
    不能什么问题都来问的,自己先实践一下。。
      

  21.   

    这个方法对规则文件名有用,不过我这的都是不规则的文件名呀!都是这样的:
    SalesWareHouseOut_138375.xml,SalesWareHouseOut_138402.xml,SalesWareHouseOut_138404.xml,SalesWareHouseOut_138405.xml,SalesWareHouseOut_138411.xml,而且有几百个,怎么弄呀?比如你在搜索C盘下面的XML文件,只需要
    string[] _files = Directory.GetFiles("C:\\", "*.xml");
    然后在遍历就好了。
            private void ShowSchemaButton_Click(object sender, EventArgs e)
            {
                string[] files = Directory.GetFiles(@"C:\Users\Administrator\Desktop\销售单", "*.xml");//获取目录下所有文件名
                foreach (string dir in files)//遍历所有文件名
                {
                    XElement element = XElement.Load(dir);
                    element.Descendants("DataField").Descendants("Data").ToList().ForEach(item => { item.SetAttributeValue("ToCorpID", "000003202879"); });
                    element.Save(dir);
                }
            }
    这么些对不对呀?怎么运行后没反应?
    你看你的文件,数据已添加了
    运行没问题了,还有个问题,我想读取SalesWareHouseOut_138375.xml,SalesWareHouseOut_138402.xml,SalesWareHouseOut_138404.xml,SalesWareHouseOut_138405.xml,SalesWareHouseOut_138411.xml,这几个文件中的CorpOrderID属性怎么写呀?是不是和添加的类似?
    方法:让CorpOrderID的值等于:"138206”
     query.SetAttributeValue("CorpOrderID", "138206");  XElement element = XElement.Load("XMLFile1.xml");
                var query = element.Descendants("DataField").Descendants("Data").
                    Where(x => (string)x.Attribute("Code") == "81143900028040405694").FirstOrDefault();
                if (query != null)
                {               
                    query.SetAttributeValue("CorpOrderID", "138206");
                }
                element.Save("XMLFile1.xml");
      

  22.   

    这个方法对规则文件名有用,不过我这的都是不规则的文件名呀!都是这样的:
    SalesWareHouseOut_138375.xml,SalesWareHouseOut_138402.xml,SalesWareHouseOut_138404.xml,SalesWareHouseOut_138405.xml,SalesWareHouseOut_138411.xml,而且有几百个,怎么弄呀?比如你在搜索C盘下面的XML文件,只需要
    string[] _files = Directory.GetFiles("C:\\", "*.xml");
    然后在遍历就好了。
            private void ShowSchemaButton_Click(object sender, EventArgs e)
            {
                string[] files = Directory.GetFiles(@"C:\Users\Administrator\Desktop\销售单", "*.xml");//获取目录下所有文件名
                foreach (string dir in files)//遍历所有文件名
                {
                    XElement element = XElement.Load(dir);
                    element.Descendants("DataField").Descendants("Data").ToList().ForEach(item => { item.SetAttributeValue("ToCorpID", "000003202879"); });
                    element.Save(dir);
                }
            }
    这么些对不对呀?怎么运行后没反应?
    你看你的文件,数据已添加了
    运行没问题了,还有个问题,我想读取SalesWareHouseOut_138375.xml,SalesWareHouseOut_138402.xml,SalesWareHouseOut_138404.xml,SalesWareHouseOut_138405.xml,SalesWareHouseOut_138411.xml,这几个文件中的CorpOrderID属性怎么写呀?是不是和添加的类似?
    方法:让CorpOrderID的值等于:"138206”
     query.SetAttributeValue("CorpOrderID", "138206");  XElement element = XElement.Load("XMLFile1.xml");
                var query = element.Descendants("DataField").Descendants("Data").
                    Where(x => (string)x.Attribute("Code") == "81143900028040405694").FirstOrDefault();
                if (query != null)
                {               
                    query.SetAttributeValue("CorpOrderID", "138206");
                }
                element.Save("XMLFile1.xml");
    这个不用foreach遍历所有文件吗?
      

  23.   

    还剩最后一个关键的问题,我想根据每个文件的CorpOrderID属性添加ToCorpID属性可以吗?比如
    SalesWareHouseOut_138375.xml,SalesWareHouseOut_138402.xml,SalesWareHouseOut_138404.xml,SalesWareHouseOut_138405.xml,SalesWareHouseOut_138411.xml这几个文件的CorpOrderID属性都不一样,我想根据不同的CorpOrderID属性添加ToCorpID属性行不行?