PDA

View Full Version : مبتدی: درج یک Node بین دو Node xml



sayan
شنبه 28 خرداد 1390, 11:21 صبح
سلام دوستان گرامی.

لطفاً منو راهنمایی کنید واقعاً گیج شده ام و نمیدونم چه طوری یه رکود بین این دو رکورد جاری درج کنم.



<?xml version="1.0" encoding="UTF-8"?>

<playlist version="1" xmlns="http://xspf.org/ns/0/">

<List title="نمونه اول">


<book>
<title> ورزشی</title>
<price>100 doller</price>
<publisher>mr hamidi</publisher>
</book>

<book>
<title>فنی</title>
<price>110 doller</price>
<publisher> mrs ahmadi</publisher>
</book>

</List>
</playlist>


من توسط متد زیر این کار رو انجام میدهم



const string path = @"my file address is here";
doc.Load(path);

XmlNode node = doc.CreateNode(XmlNodeType.Element, "book", null);

XmlNode x1 = doc.CreateElement("title");
x1.InnerText = "تاریخی";

XmlNode x2 = doc.CreateElement("price");
x2.InnerText = "120 doller";

XmlNode x3 = doc.CreateElement("publisher");
x3.InnerText = "mr rezaei";

node.AppendChild(x1);
node.AppendChild(x2);
node.AppendChild(x3);

XmlNodeList l = doc.GetElementsByTagName("List");
l[0].InsertAfter(node, doc.DocumentElement.ChildNodes[0]);

doc.Save(@"my file address is here");



ولی قسمت های زیر فایل xml حذف میشوند


<playlist version="1" xmlns="http://xspf.org/ns/0/">

<List title="نمونه اول">

شما چه دستور ، کلاس و یا متددی را جهت درج رکورد بین دو رکورد پیشنهاد میکنید؟

با تشکر.

haghft
شنبه 28 خرداد 1390, 11:25 صبح
از InsertAfter و InsertBefore استفاده کن مثل:
XmlDocument Doc = new XmlDocument();
Doc.Load("a.xml");
XmlElement newElem = Doc.CreateElement("newElem");
newElem.InnerText = "The New Elem";
Doc.DocumentElement.InsertBefore(newElem, Doc.DocumentElement.ChildNodes[2]);
Doc.Save("a.xml");
کلا به این تاپیک رجوع کنی بد نیست.
کار با XML (http://barnamenevis.org/showthread.php?290688-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%DB%8C%DA%A9-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D8%AC%D8%AF%DB%8C%D8%AF-%D8%AF%D8%B1-%D9%81%D8%A7%DB%8C%D9%84-XML)

sayan
شنبه 28 خرداد 1390, 11:29 صبح
مرسی دوست عزیز ، قبلاً راهنمایی کرده بودید:لبخندساده:

ولی این دستورات به شرطی درسته که فایل xml بصورت زیر باشد


<List>
<track>
<title>bbb</title>
<location>bbb</location>
<xml>bbb</xml>
</track>
<List>
<title>bbb</title>
<location>bbb</location>
<xml>bbb</xml>
</List>
<track>
<title>bbb</title>
<location>bbb</location>
<xml>bbb</xml>
</track>
</List>


من میخوام این خط نیز سر جای خود باقی بمانند و حذف نشوند.

<playlist version="1" xmlns="http://xspf.org/ns/0/">

sayan
شنبه 28 خرداد 1390, 12:10 عصر
خودم جواب سوالمو پیدا کردم :تشویق:

قبل از اینکه متد Save بنویسم باید این تکه کد بنویسم



XmlNode refnode = doc.ChildNodes[0].ChildNodes.Item(0).ChildNodes.Item(0).ChildNodes[0];
l[0].InsertAfter(node,refnode);


با این تکه کد دیگه میشه به داخلی ترین Node در یک فایل xml دسترسی داشت.:چشمک:

haghft
شنبه 28 خرداد 1390, 12:49 عصر
خب دیگه منم یه راهنمایی میکنم خود برنامه نویس باید تا تهشو بخونه:چشمک: