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

最近一段时间做了一个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("文件路径");



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值