您的位置:首页 > 编程语言 > ASP

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

2012-01-21 14:10 274 查看
最近一段时间做了一个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("文件路径");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: