在实际开发中遇到一些读取远程XML文件,以下是总结的方法
1,以前用的笨方法
用HTTP_GET 方法读取远程XML数据,保存在本地,然后用XmlDocument加载,这种方法比较笨,让大家见笑了
2,也不是很好, 先读取HTTP_GET 方法读取远程XML数据 用StringReader 加载文件,最后用XmlTextReader 读取数据
StringBuilder str = new StringBuilder(256);
str.Append(Comment.doGetRequest("http://localhost:6350/alidz.do?cmd=querypricebypnr&pnr=X4H4B&bigpnr=0&air=ca&fmt=xml"));
StringReader strReader = new
StringReader(str.ToString());
XmlTextReader xml = new XmlTextReader(strReader);
while (xml.Read())
{
if (xml.NodeType == XmlNodeType.Text)
{
Response.Write(xml.Value);
}
}
3,用linq 读取 比较简单
a,用XDocument 读取
XDocument fromWeb = XDocument.Load("http://localhost:6350/alidz.do?cmd=querypricebypnr&pnr=X4H4B&bigpnr=0&air=ca&fmt=xml");
// XmlReader xmlr = XmlReader.Create(strReader);
//XElement xml1 = XElement.Load(xml);
// XElement xml1 = XElement.Parse(str.ToString());
var custs = from c in fromWeb.Elements("priceinfo")
select c;
// Execute the query
foreach (var customer in custs)
{
Response.Write(customer.Value);
}
b,用XElement 读取
XElement xml1 = XElement.Load("http://localhost:6350/alidz.do?cmd=querypricebypnr&pnr=X4H4B&bigpnr=0&air=ca&fmt=xml");
var custstest = from c in xml1.Elements()
select c; // Execute the query
foreach (var customer in custstest)
{
Response.Write(customer.Value);
}
备注 可以通过XDocument或XElement的静态方法Load载入xml文档,Load可以接受URI字符串,TextReader,XmlReader作为输入源。还可以使用静态方法Parse把字符串转变为待查询的xml文档。XDocument和XElement的区别在于查询时,XElment可以跳过根几点直接查询。