ايجاد
کلاسی برای کار با فايلهای XML
مقدمه :
همانطور که در قسمت سوم مباحث برنامه نويسی اکتيوايکس های سرور سايد
گفته شد برای قرار دادن پارامترهای اتصال به بانک اطلاعاتی از
فايل XML استفاده خواهيم نمود . بنابراين ابتدا بايستی کلاسی
برای کار با فايلهای XML بنويسيم .
توجه داشته باشيد که کلاسی که در اين بخش معرفی می شود
کلاسی ساده می باشد که فقط با آن می توان مقدار يک ند Node
وجود در فايل xml را خواند . در صورت نياز ، می توانيد خودتان متدهای
ديگری را به آن اضافه کنيد . برای اين منظور نکاتی را در
انتهای همين بخش آورده ام .
XML يک زبان نشانه ای توسعه پذير ( eXtensible Markup Language ) است که در سال 1998 توسط کنسرسيوم وب جهانی W3C
ايجاد شد .
XML واقعاً يک زبان نيست بلکه يک متا-زبان است و برای توصيف
ساير زبانها بکار می رود . داده ها در
فايلهای XML براحتی قابل تعريف و استفاده هستند .
مثالی از يک فايل XML :
<user>
<name>ali</name>
<id>12</id>
</user>
کار با فايلهای XML در وی بی :
برای کار با فايلهای xml در ويژوال بيسيک
بايستی ابتدا از بخش References مورد Microsoft XML 3.0 را انتخاب کنيد . سپس يک Class Modules به
پروژه تان اضافه کنيد و نام آنرا XMLReader بگذاريد . در اين کلاس ابتدا يک متغير از نوع شی xml
برای کار با فايلهای xml تعريف
می کنيم :
Private xml
سپس
متدی برای مقداردهی اوليه شی xml
می نويسيم . اين متد دارای يک متغير ورودی است که نام فايل xml
مورد نظر می باشد :
Public Sub Initiate(ByVal filename As String)x
Set xml = CreateObject("Microsoft.XMLDOM")x
xml.async = False
xml.Load (server.MapPath(filename))x
End Sub
توجه کنيد
که در کد فوق از شی server برای
يافتن مسير فيزيکی فايل XML استفاده شده است
بنابراين ابتدا بايستی در Class_Initialize اين شی را مطابق مطالب درس دوم مقداردهی کنيد .
حال بايستی متدی برای خواندن مقدار يک ند از فايل xml
بنويسيم . در اين متد توسط يک حلقه for each ندهای
فايل را بررسی می کنيم تا ندی را بيابيم که نامش مشابه با متغير
ورودی متد است . سپس با استفاده از خاصيت nodeValue می توانيم مقدار آنرا بخوانيم .
Public Function getvalue(ByVal
NName As String) As String
Dim x
getvalue = ""x
For Each x In
xml.documentElement.childNodes
If x.nodeName = NName Then
getvalue = x.childNodes(0).nodeValue
Exit For
End If
Next
End
Function
مثالی از کار با کلاس XMLReader :
همانطور که گفته شد می توانيم پارامترهای اتصال به بانک
اطلاعاتی را در فايل XML قرار دهيم و
در زمان Initiate کردن ADODB برای اتصال به بانک
اطلاعاتی ، آنها را بخوانيم :
Dim xmlf As New XMLReader
Call
xmlf.Initiate("config.xml")x
userName = xmlf.getvalue("DataBaseID")x
Password = xmlf.getvalue("DataBasePassword")x
database_name = xmlf.getvalue("DataBaseName")x
server_name = xmlf.getvalue("ServerAddress")x
ساختار يک
فايل نمونه config.xml
بصورت زير می باشد :
<Application>testIt</Application>
<ServerAddress>192.168.0.1</ServerAddress>
<DataBaseName>Edatabase</DataBaseName>
<DataBaseID>Euser</DataBaseID>
<DataBasePassword>Epass</DataBasePassword>
ساير نکات برای توسعه کلاس فوق :
نکات زير شما را در نوشتن کلاسی کاملتر راهنمايي می کنند :
1 - توجه داشته باشيد که xml.documentElement
بعنوان ريشه فايل xml محسوب
می شود . بنابراين برای دسترسی به ريشه می توان يک
شی ريشه نيز تعريف کرد :
Dim root
Set
root = xml.documentElement
2 - در
صورتيکه يک فايل xml دارای چندين ند در ريشه اش باشد و هر ند ريشه نيز
دارای چندين ند درونی باشد توسط خاصيت root.childNodes.length و با استفاده از يک حلقه for می توان
به اين ندها دسترسی داشت . برای مثال فايل زير را درنظر بگيريد :
<people>
<user>
<name>ali</name>
<id>1</id>
</user>
<user>
<name>reza</name>
<id>2</id>
</user>
</people>
حلقه زير
روش دسترسی را به اين فايل نشنان می دهد :
For I = 0 TO (root.childNodes.length - 1)x
Set thisChild = root.childNodes(I)x
name = thisChild.childNodes(0).Text
id = thisChild.childNodes(1).Text
Next
3 – اضافه
کردن ند به فايل : برای اضافه کردن ند از متدهای createNode و appendChild
استفاده می شود برای مثال برای اضافه کردن يک user
جديد به مثال فوق :
Set newuser = xml.createNode("element",
"people",
"")x
Dim name,id
Set newname = xml.createNode("element",
"name", "")x
newname.text = yourname
Set newid = xml.createNode("element",
"id", "")x
newid.text = yourid
newuser.appendChild(newname)x
newuser.appendChild(newid)x
root.appendChild(newuser)x
در انتها
نيز بايستی فايل را ذخيره نمود :
xml.save(Server.Mappath(filename))x
4 – حذف يک ند
از فايل : برای حذف يک ند از فايل توسط يک حلقه for
بايستی ند مورد نظر را يافته و سپس توسط متد removeChild آنرا حذف کنيم :
found = False
For I = (root.childNodes.length - 1) TO 0 STEP -1
Set thisChild = root.childNodes(I)x
name = thisChild.childNodes(0).Text
If name = searchname Then
root.removeChild(thisChild)x
found = True
End If
Next
در انتها
نيز فايل xml را ذخيره کنيد .
بازگشت به فهرست
بازگشت به صفحه نخست