PDA

View Full Version : خواندن اطلاعات یک فایل XML



مهدی رحیم زاده
سه شنبه 07 اسفند 1386, 15:23 عصر
میشه بگید که چطور می تونم اطلاعات داخل تگهای یک XML رو بخونم ؟ یعنی تشخیص بدم که تگ ها از کجا شرو شدن و کجا تموم میشن و بعد بتونم اطلاعات داخل اون تگ ها رو بخونم .

مهدی رحیم زاده
چهارشنبه 08 اسفند 1386, 14:41 عصر
کسی تو این زمینه کار نکرده ؟؟؟؟

Alireza_Salehi
چهارشنبه 08 اسفند 1386, 17:01 عصر
معمولا گره ای که با دست بازمیشه با دندون باز نمی کنند، قبلا پارسر براش نوشتن لازم نیست سرو ته نود ها رو پیدا کنید!

یک نمونه از کلاس System.XML.XMLDocument بسازید.
با متد Load یا LoadXML پرش کنید.
با خاصیت DocumentElement به ریشه سند XML دسترسی دارید
با خاصیت Nodes به Element ها دسترسی دارید و هر Node هم خاصیت Attributes داره که از طریق اون به Attribute ها دسترسی خواهید داشت.

اگر متوجه نشدید بگید مثال بزارم.

مهدی رحیم زاده
چهارشنبه 08 اسفند 1386, 21:44 عصر
اگر لطف کنید و یک مثال برام بزارید ممنون میشم . اگر با سی شارپ باشه دیگه واقعا میشه طلا ...

Alireza_Salehi
پنج شنبه 09 اسفند 1386, 07:04 صبح
فرض کنید فایلی به صورت زیر داریم:


<?xml version="1.0" encoding="utf-8" ?>
<person>
<name title="Mr." first="Ahmad" last="Ahmadi"/>
<address>
<country>Iran</country>
<region>Tehran</region>
<city>Tehran</city>
<street>Pasdaran</street>
</address>
<qualifications>
<q title="ASP.NET" experience="High"/>
<q title="C#.NET" experience="Medium"/>
<q title="XML" experience="Medium"/>
<q title="Ajax" experience="Low"/>
</qualifications>
</person>

همون طور که می بینید برخی از مقادیر درون Element ها هستند و برخی درون Attribute ها.
یک روش ساده برای خواندن یا دستکاری مقادیر به صورت زیر هست:


XmlDocument xd = newXmlDocument();
xd.Load(Server.MapPath("~/XMLFile.xml"));
Response.Write("Name:&nbsp;");
Response.Write(xd.DocumentElement.ChildNodes[0].Attributes["nick"].Value);
Response.Write(",&nbsp;");
Response.Write(xd.DocumentElement.ChildNodes[0].Attributes["first"].Value);
Response.Write(",&nbsp;");
Response.Write(xd.DocumentElement.ChildNodes[0].Attributes["last"].Value);
Response.Write("<br/>");
Response.Write("Address:&nbsp;");
Response.Write(xd.DocumentElement.ChildNodes[1].ChildNodes[0].Value);
Response.Write(",&nbsp;");
Response.Write(xd.DocumentElement.ChildNodes[1].ChildNodes[1].Value);
Response.Write(",&nbsp;");
Response.Write(xd.DocumentElement.ChildNodes[1].ChildNodes[2].Value);
Response.Write(",&nbsp;");
Response.Write(xd.DocumentElement.ChildNodes[1].ChildNodes[3].Value);
Response.Write("<br/>");
Response.Write("Qualifications:<br/>");
foreach (XmlNode xn in xd.DocumentElement.ChildNodes[2].ChildNodes)
{
Response.Write(xn.Attributes["title"].Value);
Response.Write(",&nbsp;&nbsp;");
Response.Write(xn.Attributes["experience"].Value);
Response.Write("<br/>");
}

البته اگر می خواهید مستقیم به HTML تبدیل کنید روش ساده تری با استفاده از XSL و XSLT وجود داره.


برای دستکاری کردن مقادیر هم کافیه با همین روش Value ها رو عوض کنید و در نهایت:


xd.Save(Server.MapPath("~/XMLFile.xml"));


این یک روش خیلی ساده بود، برای قسمت های مختلف یک سند XML در فضای نام System.XML یک کلاس وجود دارد، مثل XMLElement, XMLAttribute, XMLComment و کلی امکانات دیگه مثل XMLReader و XMLWriter. برای آدرس دهی و حرکت در میان نودها هم فضا نام System.XML.XPath امکانات زیادی داره.

برای اطلاعات بیشتر به MSDN مراجعه کنید.