PDA

View Full Version : اضافه کردن ی نود به xml



intel_amd
یک شنبه 27 شهریور 1390, 12:10 عصر
فرض کنید یک فایل xml به شکل زیر باشه

<a>
<b>
<c>
<c/>
<b/>
<a/>

حالا دستوری هست که با دادن مقدار ایندکسه حاصل از پیمایش عمقیه این xml تا محله مورد نظر یک نود به xml اضافه کنه؟مثلا با دادن مقدار 2 به دستور , یک نود به عنوان فرزند C اضافه کنه . یعنی قبل از <c/> نودی مثله <d></d> اضافه بشه

mehdi.mousavi
یک شنبه 27 شهریور 1390, 12:30 عصر
سلام.
می تونید بدین شکل عمل کنید:


XElement elm = XElement.Parse("<a><b><c></c></b></a>");
elm.XPathSelectElement("//c").Add(new XElement("d"));

که نتیجه این خواهد بود:

<a>
<b>
<c>
<d />
</c>
</b>
</a>

موفق باشید.

intel_amd
یک شنبه 27 شهریور 1390, 12:35 عصر
البته از توجهتون ممنون اما تو سوال گفتم با ایندکسه یک پیمایش عمقی می خام به اون نقطه دسترسی پیدا کنم چون اولا a , b , c میتونه بی نهایت باشه و اصلا معلوم نیست چی هستن و چقدر تو در تو هستن و میتونه بعضی جاهاش چند سطح تو رفته باشه و بعضی جاهاش بیشتر یا کمتر
فقط با ایندکسی که از پیمایش عمقی بدست بیاد میشه؟

mehdi.mousavi
یک شنبه 27 شهریور 1390, 13:04 عصر
سلام.
می تونید بدین شکل عمل کنید:


XDocument doc = XDocument.Parse("<data><a><b><c></c></b></a></data>");
XElement node = doc.Root.Descendants().Where((el, index) => index == 2).SingleOrDefault();
if (node != null)
node.Add(new XElement("d"));

به data element ای که به XML اضافه کردم، دقت کنید. عدد 2 هم همون Index مورد نظر شماست... اگر یک بذاریدش، نود d به نود b اضافه خواهد شد.

موفق باشید.