PDA

View Full Version : نمایش محتویات یک فایل xml به صورت دلخواه



s.iran
سه شنبه 25 فروردین 1388, 19:47 عصر
سلام دوستان
محتویات یک فایل xml البته نه همش یک قسمت های دلخواه را چه جوری می شه در label یا کنترل های دیگه استفاده کرد؟

با تشکر:خجالت:

kiosksoft
شنبه 29 فروردین 1388, 12:29 عصر
دوست عزیز
فایل Xml یک فایل متنی ساده اما ساخت یافته است یعنی ساختاری شبیه درخت دارد که میتوان گره ها یا شاخه های آن را پیمایش کرد.
شما برای خواندن فایل Xml مورد اگر ساختاری نامشخص دارد باید آن را پیمایش کنید و داده های مورد نظر خود را واکشی کنید .
اما در مورد فایلهای با ساختار مشخص که اکثر فایل های Xml از این دسته میباشند ,میتوانید از ابزارهای ارائه شده برای کار با این فایل ها استفاده کنید.
برای خواندن مقادیر گره ها با شرایط خاص و ساختن Query های لازم میتوانید از XPath استفاده کنید .
در ذیل یک نمونه کد با زبان سی شارپ در asp.net ارائه میدم که بیشتر میتونه کمک کنه.
در این مثال که آب هوای کشور از یک فایل Xml لود ,خوانده سپس پردازش میکند و مقادیر بعضی گره هارو با استفاده از دستورات XPath در خروجی نمایش میدهد.




protected void Page_Load(object sender, EventArgs e)
{
string rssURL = "http://www.weather.ir/farsi/RSS/xml-forecast.asp";
ProcessRSSItemIR(rssURL);
}
public void ProcessRSSItemIR(string rssURL)
{
try
{
StringBuilder strBuilder = new StringBuilder();
System.Net.WebRequest myRequest = System.Net.WebRequest.Create(rssURL);
System.Net.WebResponse myResponse = myRequest.GetResponse();
System.IO.Stream rssStream = myResponse.GetResponseStream();
System.Xml.XmlDocument rssDoc = new System.Xml.XmlDocument();
rssDoc.Load(rssStream);
System.Xml.XmlNodeList rssItems = rssDoc.SelectNodes("root/row");
string title = "";
string link = "";
string description24 = "";
string description72 = "";

for (int i = 0; i < rssItems.Count; i++)
{
System.Xml.XmlNode rssDetail;
rssDetail = rssItems.Item(i).SelectSingleNode("fcity");
if (rssDetail != null)
{
title = rssDetail.InnerText;
}
else
{
title = "";
}
//rssDetail = rssItems.Item(i).SelectSingleNode("Airstate24_1");
//if (rssDetail != null)
//{
// link = rssDetail.InnerText;
//}
//else
//{
// link = "";
//}
rssDetail = rssItems.Item(i).SelectSingleNode("Airstate24_1");
if (rssDetail != null)
{
description24 = rssDetail.InnerText;
}
else
{
description24 = "";
}
rssDetail = rssItems.Item(i).SelectSingleNode("Airstate24_2");
if (rssDetail != null)
{
description24 = description24 + " , " + rssDetail.InnerText;
}
else
{
description24 = "";
}

rssDetail = rssItems.Item(i).SelectSingleNode("Airstate24_1");
if (rssDetail != null)
{
description72 = rssDetail.InnerText;
}
else
{
description72 = "";
}
rssDetail = rssItems.Item(i).SelectSingleNode("Airstate24_2");
if (rssDetail != null)
{
description72 = description72 + " , " + rssDetail.InnerText;
}
else
{
description72 = "";
}

strBuilder.Append("<table > ");
// Response.Write("<p><b><a href='" + link + "' target='new'>" + title + "</a></b><br/>");
strBuilder.Append("<tr ><td ><br><h4 > <p class=lblTitleRSS>" + title + "</p></h4></td></tr>");
strBuilder.Append("<tr><td ><p class=lblTitle> 24 ساعت آینده</p></td></tr>");
strBuilder.Append("<tr><td> <p class=lblDescriptionRSS>" + description24 + "</p></td></tr>");
strBuilder.Append("<tr><td ><p class=lblTitle>72 ساعت آینده</p></td></tr>");
strBuilder.Append("<tr><td> <p class=lblDescriptionRSS>" + description24 + "</p></td></tr>");
strBuilder.Append("</table>");
//Response.Write(description + "</p>");
lblWeather.Text = strBuilder.ToString();
}
}
catch { }
}