ورود

View Full Version : سوال: جستوجوی یک node خاص در xml و خواندن مقادیر آن node ؟



bizhanmp
دوشنبه 25 آبان 1388, 22:45 عصر
با سلام به دوستان عزیز من یه سایت دارم میسازم که میخواستم بعضی از محتوای متنی صفحه اول را که داخل یک xml ریختم و هر کدوم داخل یک نود هست را با استفاده از id اون node بخونم و هنگام بار شدن صفحه داخل صفحه بریزم.
همچنین میخوام بتونم هر کدوم از نود ها را که خواستم محتوای اون نود را تغییر بدم.
لطفا راهنمایی کنید عجله دارم :ناراحت:.
با تشکر.

A.S.Roma
سه شنبه 26 آبان 1388, 18:50 عصر
اگه از کنترل هایی که ساختار درختی دارن استفاده کنی که مشکلی نیست.
اما اگر می خوای با کنترل های دیگر کار کنی فکر کنم 2 تا راه داری :
1- استفاده از XSLT که مستقیم XML رو تبدیل به HTML یا چیز دیگه کنی ... ( یک سرچ بزن )
2- نوشتن یک متد برای بدست آوردن Node ها و Node های Child

bizhanmp
پنج شنبه 28 آبان 1388, 21:24 عصر
خیلی ممنون :لبخندساده:
اما من میخواستم یه node خاص را با استفاده از مقدار id جستو جو کنم و بتونم محتوای نود را بخونم یا تغییر بدم .
اگه اطلاعی دارید لطفا راهنمایی کنید .
با تشکر :لبخندساده:

Chabok
جمعه 29 آبان 1388, 01:04 صبح
با سلام

در dotNet بستر مناسبی جهت کار با فایل های XML در فضای نام System.Xml موجوده .

مهمترین این کلاس ها عبارتند از :

XmlTextReader (http://msdn.microsoft.com/en-us/library/system.xml.xmltextreader%28VS.80%29.aspx)
کلاسی جهت ارتباط با فایل XML بابت خواندن اطلاعات به صورت Forward Only
توسط این کلاس با هر بار صدا زدن متد read شی ایجاد شده node بعدی خوانده می شود
توسط NodeType (http://msdn.microsoft.com/en-us/library/system.xml.xmlnodetype%28VS.80%29.aspx) ماهیت گره جاری مشخص می شود .
توسط Name نام گره جاری مشخص می شود و ...

یک کلاس عالی جهت خواندن و پیمایش یک فایل XML بصورت دستی

XmlTextWriter
کلاسی جهت ارتباط با فایل XML بابت نوشتن اطلاعات به صورت Forward Only

XmlDocument (http://msdn.microsoft.com/en-us/library/system.xml.xmldocument%28VS.80%29.aspx)
کلاسی جهت ارتباط با یک فایل XML و برای پیمایش ، جستجو و تغییرات در یک فایل XML

و ...
--------------
مبحث فایل های XML ساده ، ولی گسترده است .

این چند لینک شامل مباحث و نمونه های خوبی هستند که نحوه انجام کار با فایل های XML را تشریح کرده اند :

استخراج داده از Xml در ASP.NET (http://www.ashiyane.org/forums/showthread.php?t=13283)
خواندن از فایل XML (http://barnamenevis.org/forum/showthread.php?t=163913)

How to get present read state of XmlReader in ASP.NET Xml (http://asp-net-example.blogspot.com/2009/05/xmlreader-readstate-how-to-get-present.html)

XML In ASP.NET - The XmlTextReader (http://www.csharpfriends.com/articles/getArticle.aspx?articleID=309&page=2)

How to read and process Xml file element data in asp.net (http://asp-net-example.blogspot.com/2009/05/xmlreader-how-to-read-and-process-xml_06.html)

موفق باشید .

Behrouz_Rad
جمعه 29 آبان 1388, 09:55 صبح
البته باید ابتدا ساختار فایل XML شما رو دید.
من دمویی واست تهیه کردم تا با روند کار آشنا بشی. برای کار با XML از LINQ استفاده کن.
اگر فایل XML ات ساختار ذیل رو داشته باشه:


<?xml version="1.0" encoding="utf-8" ?>
<root>
<child>
<field1 id="1">child 1 - field 1</field1>
<field2 id ="2">child 1 - field 2</field2>
</child>
<child>
<field1 id="3">child 2 - field 3</field1>
<field2 id ="4">child 2 - field 4</field2>
</child>
</root>

به شکل ذیل می تونی به مقدار هر کدوم از تگ های field با تعیین id اون دسترسی داشته باشی:


StringBuilder sb = new StringBuilder(Server.MapPath(".")).Append(@"\XMLFile.xml");

XElement document = XElement.Load(sb.ToString());

sb.Length = 0;

XElement child = (from field in document.Elements("child").Elements()
select field).FirstOrDefault(s => s.Attribute("id").Value.Equals("3"));

Response.Write(child != null ? child.Value : "Not Found!");

و برای تغییر مقدار تگ:


StringBuilder sb = new StringBuilder(Server.MapPath(".")).Append(@"\XMLFile.xml");
string path = sb.ToString();
sb.Length = 0;

XElement document = XElement.Load(path);

XElement child = (from field in document.Elements("child").Elements()
select field).FirstOrDefault(s => s.Attribute("id").Value.Equals("3"));

if (child != null)
{
child.SetValue("Salam Azizam!");
document.Save(path);
Response.Write("Done...!");
}


موفق باشید.

bizhanmp
یک شنبه 01 آذر 1388, 19:06 عصر
از هر دو دوست عزیز به خاطر راهنمایی خوبشون تشکر میکنم
خیلی ممنون :چشمک: