asp.net处理XML文件的两种方法

来源:互联网 发布:sql 表假脱机 编辑:程序博客网 时间:2024/04/30 03:21

最近一段时间做了一个webservice,用于读取xml文件,返回一个字符串供其他方法调用。

怎样创建webservice详说,下面代码在webservice中读取xml文件的两种方式,当然在asp.net程序中也同样适用。

xml文件的内容是,下面几段代码分别用到了不同的xml文件,但是编写xml文件的格式是相同的

<?xml version="1.0" encoding="utf-8" ?><RecommandTools>  <Tool>    <LCStage>123546</LCStage>    <Name>TFS</Name>    <SME>What's SME</SME>  </Tool></RecommandTools>

第一种方式:用linq读取

 [WebMethod]        public string ToolTechnologyLCStageMap(string lCStage)        {            var doc = XDocument.Load(Server.MapPath("~/App_Data/RecommandTools.xml"));            var query = from tool in doc.Descendants("Tool")                        where tool.Element("LCStage").Value == lCStage                        select tool;            return query.ToList()[0].ToString();        }

第二种方式采用普通asp.net类方式读取

[WebMethod]        public string WebServiceProjectItemInfo1() {                        var doc = XDocument.Load(Server.MapPath("~/App_Data/RecommandTools.xml"));            return doc.ToString();        }
第二种方式更为简单,但是将xml文件中所有数据全部取出,如果xml中数据量大,并且只想取出部分数据时,则不适用,而第一种采用linq方式读取则具有更强的灵活性,方便查询,下面这段代码演示采用linq检索xml文件部分数据,根据id检索xml文件中的记录。

[WebMethod]        public string GetXML(int id)        {            var doc = XDocument.Load(Server.MapPath("~/App_Data/Person.xml"));                       var query = from peron in doc.Descendants("Person")                        where peron.Element("Id").Value == id.ToString()                        select peron;            return query.ToList()[0].ToString();        }

上面三段代码演示怎样将xml文件中的数据转换成字符串,下面则对检索到的字符串进行处理,以便于展示,处理具有xml格式的字符串的方式有两种,

第一种使用asp.net的StringReader类,返回的是dataSet集合

 public DataSet GetXMLForRecommandTools(){            DataSet ds = new DataSet();            try {                WebService1 server = new WebService1();                string response = server.WebServiceProjectItemInfo1();                if (response.ToLower() != "no data found for the requested service")                {                    StringReader reader = new StringReader(response);                    ds.ReadXml(reader);                }                 return ds;            }            catch {                return null;            }        }
第二种使用linq方式,返回list泛型

public List<Person> GetXMLFromServer(int id)        {            WebService1 server = new WebService1();            string response = server.GetXML(id);            TextReader reader = new StringReader(response);            var doc = XDocument.Load(reader);            //"Person" is the node of xml file whitch is samed with field in a table            //the web application in the project have to build a entity class before using the linq method            //this demo have a entity class named Person whitch has Id,Address,Mobile and Name field             var query = from person in doc.Descendants("Person")                        select new Person                        {                            Id = Convert.ToInt32(person.Element("Id").Value),                            Address = person.Element("Address").Value,                            Mobile = person.Element("Mobile").Value,                            Name = person.Element("Name").Value                        };            return query.ToList();        }

两种方法都可以作为gridview的直接数据源,与其绑定,但是个人觉得list的数据集合更适用一些。

最后附上在工程中没有Server.MapPath()方法时怎么找到xml路径,比如建一个控制台应用程序时,便没有此方法,现在应该如此

HttpContext.Current.Server.MapPath("文件路径");