در این قسمت می خواهیم درباره ی اضافه کردن Node ها صحبت کنیم.مثالهای این صفحه بر پایه فایل books.xml می باشند
برای اضافه کردن node از متد appendChild استفاده می شود  فرض کنید می خواهیم node جدیدی را به اولین تگ book اضافه کنیم
و فرض کنید قبلا node با نام book خودش سه node فرزند دارد  node جدید بعد از تمام  node های فرزند تگ book اضافه می شود
در صورتیکه برایتان مهم است node جدید در کدام محل اضافه شود از متد insertBefore استفاده کنید
مثال
قطعه برنامه زیر یک node المنت به نام edition ایجاد می کند و انرا بعد از اخرین فرزند اولین تگ book اضافه می کند

xmlDoc=loadXMLDoc(“books.xml”);

newel=xmlDoc.createElement(“edition”);

x=xmlDoc.getElementsByTagName(“book”)[0];

x.appendChild(newel);

 خط دوم :

newel=xmlDoc.createElement(“edition”);

در سند xml ای که اشاره گر xmldoc به ان اشاره می کند ، تگ المنت edition را بوجود می اورد  و اشاره گری به نام newel به این تگ جدید اشاره می کند

خط سوم :

x=xmlDoc.getElementsByTagName(“book”)[0];

 متغیر x به اولین  تگ book ای  که در سند xml قرار دارد اشاره می کند

خط چهارم :

x.appendChild(newel);

node المنتی  که newel به ا ن اشاره می کند بعد از اخرین فرزند تگی که x به ان اشاره می کند افزوده می شود

اضافه کردن node با insertBefore

قبلا گفتیم که بطور پیش فرض ،  node جدید بعد از اخرین فرزند node المنت مشخص شده اضافه می شود

از این متد برای اضافه کردن node جدید قبل از node مورد نظر استفاده می شود
این متد وقتی قابل استفاده است که برایتان مهم باشد nod جدید در کدام قسمت تگ اضافه شود
مثال

xmlDoc=loadXMLDoc(“books.xml”);

newNode=xmlDoc.createElement(“book”);

x=xmlDoc.documentElement;
y=xmlDoc.getElementsByTagName(“book”)[3];

x.insertBefore(newNode,y);

 

خط دوم :

newNode=xmlDoc.createElement(“book”);

تگ المنتی به نام book ایجاد می کند و اشاره گری به نام newnode  به ان اشاره می کند

خط سوم :

x=xmlDoc.documentElement;

اشاره گری به نام x به تگ ریشه فایل xml اشاره می کند

تگ ریشه همان تگی است که تمام تگ های دیگر در ان قرار می گیرند

مثلا در برنامه html تگ html می شود تگ ریشه

خط چهارم :

y=xmlDoc.getElementsByTagName(“book”)[3];

متغیر y به چهارمین تگ book ای که در فایل xml قرار دارد اشاره می کند

توجه داشته باشید اندیس شماره گذاری از صفر است

خط پنجم :

x.insertBefore(newNode,y);

تگ جدیدی که ایجاد کرده بودیم و newnode به ان اشاره می کرد ، قبل از تگی که y به ان اشاره می کند در فایل xml ما اضافه می شود

مشاهده و اجرای برنامه کامل

نکته مهم :

اگر مقدار پارامتر دوم متد insertBefore برابر null باشد  ، انوقت node جدید بعد از اخرین فرزند node مورد نظر اضافه می شود

یعنی هر دو دستور زیر یکی خواهند  بود :

x.insertBefore(newNode,null)

x.appendChild(newNode)

هر دو دستور بالا ، node جدیدی که ایجاد کرده ایم و متغیر newnode به ان اشاره می کند را بعد از اخرین node فرزند تگی که X به ان اشاره می کند قرار می دهد
اضافه کردن node از نوع صفت
توجه کنید هیچ متدی با نام  addAtribute وجود ندارد
بلکه متدی به نام setAttribute وجود دارد که اگر صفت مورد نظر قبلا وجود نداشته باشد انرا ایجاد می کند
مثال

xmlDoc=loadXMLDoc(“books.xml”);

x=xmlDoc.getElementsByTagName(‘book’);
x[0].setAttribute(“edition”,”first”);

 خط دوم :

x=xmlDoc.getElementsByTagName(‘book’);

اشاره گری  به نام x به تمام تگ های book اشاره می کند

چگونه ؟ چون بیشتر از یک book در فایل books.xml داریم ،  ارایه ای به نام x ایجادمی شود

که هر خانه ان به یکی از تگ های book اشاره می کند

خط سوم :

x[0].setAttribute(“edition”,”first”);

در  تگ book ای که خانه صفرم x به ان اشاره می کند ( که مطمئنا اولین تگ book می شود ) صفتی به نام edition را با مقدار first اضافه می کند
مشاهده و اجرای برنامه کامل

نکته مهم :

در صورتیکه صفت مشخص شده در متد setAttribute قبلا وجود داشته باشد ، چه اتفاقی می افتد ؟

جواب این است که مقدار مشخص شده در پارامتر دوم این متد جایگزین مقدار قبلی ان صفت در تگ مشخص شده می شود
اضافه کردن متن به node متنی
متد insertData داده هایی را به node متنی که هم اکنون وجود دارد اضافه می کند
متد insertData دو پارامتر دارد :

۱- offset

که مشخص می کند رشته مورد نظر که می خواهیم اضافه کنیم از کاراکتر چندم به بعد رشته فعلی اضافه شود ( محل شروع از صفر در نظر گرفته می شود )

۲- string:

رشته ای که می خواهیم اضافه کنیم

مثال :

فایل books.xml را که در بالای همین صفحه پیوندی به ان وجود دارد باز کنید

اولین تگ title ان دارای node متنی با مقدار Everyday Italian  می باشد

<title lang=”en”>Everyday Italian</title>
حالا شما کاراکترهای متنی این node متنی را از چپ به راست و از صفر شماره گذاری کنید

مثلا :

e می شود صفر

v می شود ۱

e می شود ۲

و الی اخر
حالا می خواهم دستوراتی بنویسم که رشته easy را از موقعیت صفر رشته فعلی اضافه کند

xmlDoc=loadXMLDoc(“books.xml”);

x=xmlDoc.getElementsByTagName(“title”)[0].childNodes[0];

x.insertData(0,”Easy “);

خط دوم :

x=xmlDoc.getElementsByTagName(“title”)[0].childNodes[0];

اولین فرزند اولین تگ title را از سندی که xmldoc ( یعنی فایل books.xml) به ان اشاره می کند را پیدا کرده و اشاره گری به نام x به ان اشاره می کند

خط سوم :

x.insertData(0,”Easy “);

مقدار easy  را از موقعیت صفر به بعد رشته ای که در node ای می باشد که x به ان اشاره دارد اضافه می کند