در مقاله "XML در دات نت : ايجاد يک فايل " با نحوه ايجاد يک فايل XML با استفاده از XmlTextWriter آشنا شديم . در اين مقاله به بررسي نحوه خواندن يک فايل XML خواهيم پرداخت .
به منظور دستيابي به محتواي يک سند XML ، مي بايست آن را Parse نمود تا به بخش مورد نظر دست يافت . به نرم افزارهائي که امکان انجام چنين عملياتي را فراهم مي نمايند ، "پارسر" گفته مي شود . پارسرها داراي دو نوع متفاوت مي باشند :
-
پارسرهاي ( DOM : ( Document Object Model ، يک ساختار درختي از سند XML را در حافظه ايجاد نموده و امکان حرکت بر روي گره ها و يا خصلت هاي متفاوتي را در اختيار قرار مي دهند.
-
پارسرهاي ( SAX : ( Simple API for XML ، سندهاي XML را به صورت ترتيبي پردازش نموده و نسبت به پارسرهاي DOM حافظه بمرابت کمتري را اشغال مي نمايند .
در MSXML ver 3.0 ، شرکت مايکروسافت دو پارسر فوق را ارائه نموده است . در دات نت نيز از پارسر DOM که داراي سازگاري و شباهت بسيار زيادي با MSXML است و پارسر SAX که دستخوش تغييرات متعددي نسبت به گذشته شده است ، استفاده مي گردد . پارسرهاي قبل از دات نت ، (مثلا" پارسر MSXML ) کلاس ها و اينترفيس هاي متعددي را به منظور انجام عمليات متقاوت بر روي اسناد XML ارائه نموده که با استاندارد پيشنهادي کنسرسيوم وب ، سازگاري و نزديکي قابل توجهي دارد. در دات نت علاوه بر استمرار وضعيت فوق ، روش هاي ساده و انعطاف پذيري به منظور کار بر روي اسناد XML ارائه شده است .
کلاس XmlTextReader
کلاس XmlTextReader روشي سريع و موثر به منظور parse نمودن اسناد XML را ارائه مي نمايد. کلاس فوق از حافظه بطرز کاملا" حساب شده و بهينه اي استفاده مي نمايد. صرفا" گره جاري در حافظه نگهداري مي گردد ( Cached ) و عنصري که قبلا" parse شده است در حافظه وجود نخواهد داشت . در صورتي که به وجود عناصر قبلي نياز باشد ، مي بايست فايل XML مجددا" از ابتدا و به صورت forward-only خوانده شود. کلاس فوق از XmlReader به ارث رسيده و متعلق به System.Xml مي باشد .
با استفاده از متدها و خصلت هاي ارائه شده توسط کلاس فوق، مي توان بسادگي به محتوا و عناصر موجود در يک سند XML دست يافت . متدهاي ارائه شده همواره گره جاري را برمي گردانند و در ادامه مي توان عمليات مورد نظر را بر روي آنان انجام داد .
به منظور استفاده از کلاس XmlTextReader مي بايست از System.Xml استفاده و يک نمونه از کلاس فوق را ايجاد نمود .
Dim reader As XmlTextReader reader = New XmlTextReader ( Server.MapPath("visitors.xml") ) |
به منظور خواندن محتواي يک سند XML از متد Read و در يک ساختار تکرار استفاده مي نمائيم .
Do while reader.read () 'عمليات مورد نظر loop |
در صورتي که يک گره با موفقيت خوانده شود، مقدار True برگردانده شده و در ادامه مي توان با استفاده از متدها و خصلت هاي ارائه شده ، عمليات مورد نظر را انجام داد. بررسي نوع يک گره ، دستيابي به خصلت هائي خاص و يا محتواي يک گره نمونه هائي در اين زمينه مي باشد .
جدول زير مهمترين متدها و خصلت هاي کلاس XmlReaderClass را نشان مي دهد .
کاربرد |
متد / خصلت |
متد فوق ، cursor را بر روي گره بعدي قرار داده و درصورتي که گره با موفقيت خوانده شود ، مقدار true را بر مي گرداند . از متد فوق در يک ساختار تکرار و به منظور خواندن و انجام پردازش هاي لازم در خصوص اسناد XML استفاده مي گردد . |
Read() |
خصلت فوق نوع گره را بر مي گرداند ( المان ، متن و يا ساير موارد ). |
NodeType |
خصلت فوق، نام گره جاري را بر مي گرداند . |
Name |
خصلت فوق ، محتواي گره را بر مي گرداند . |
Value |
محتواي يک گره را بر اساس يک نوع داده خاص برمي گرداند. مثلا" متد ReadString محتواي يک گره را به صورت يک رشته برمي گرداند . |
ReadString(), Readxxxx().... |
متد فوق ، مقدار خصلتي را که به عنوان پارامتر در اختيار آن گذاشته شده است ، برمي گرداند . |
GetAttribute("attb_name") |
در صورتي که گره اي داراي يک خصلت باشد، مقدار true و در غيراينصورت مقدار False ، برگردانده مي شود . |
HasAttributes |
مثال : استفاده از XmlTextReader به منظور خواندن يک فايل XML
در اين مثال قصد داريم فايل Visitors.xml را که در مقاله "XML در دات نت : ايجاد يک فايل با نحوه ايجاد آن آشنا شديم را خوانده و عناصر موجود در آن را به همراه مقادير نسبت داده شده به هر يک در خروجي نمايش دهيم .
محتواي فايل Visitors.xml |
<?xml version="1.0" encoding="utf-8"?> <userInfo> <browserInfo> <urlReferrer>http://localhost/MakeXmlFile1.aspx</urlReferrer> <userAgent>Mozilla/4.0 (compatible; MSIE 6.0; ... </userAgent> <userLanguages>fa, en-us;q=0.5</userLanguages> </browserInfo> <visitInfo timeVisited="10/15/2004 2:18:27 AM"> <ip>127.0.0.1</ip> <rawUrl>/MakeXmlFile1.aspx</rawUrl> <totalbytes>0</totalbytes> <browsertype>IE6</browsertype> <contentEncoding>Unicode UTF-8)</contentEncoding> <contentlength>0</contentlength> <httpmethod>GET</httpmethod> <IsSecureConnection>False</IsSecureConnection> <RequestType>GET</RequestType> </visitInfo> </userInfo> |
مرحله اول : تايپ کد زير با استفاده از يک ويرايشگر
<%@ Import Namespace="System.Xml" %> <%@ Import Namespace="System.Text" %>
<script runat="server"> sub Page_Load(obj as object, e as eventargs) Dim reader As XmlTextReader
Try reader = New XmlTextReader ( Server.MapPath("visitors.xml") ) Dim strNodeResult As String ="" Dim objNodeType As XmlNodeType
Do while reader.read () objNodeType = reader.NodeType Select Case objNodeType Case XmlNodeType.XmlDeclaration strNodeResult + =" XML Declaration : <b>" &_ reader.Name & " " & reader.Value & "</b><br /> " Case XmlNodeType.Element strNodeResult + =" Element : <b>" &_ reader.Name & "</b><br /> " Case XmlNodeType.Text strNodeResult + =" - Value : <b>" &_ reader.Value & "</b></p><br /> " End Select If reader.AttributeCount > 0 Then Do While reader.MoveToNextAttribute() strNodeResult += "  - Attribute : <b>" & _ reader.name & "</b>   - Value <b>" & reader.Value & "</b><br />" Loop End If Loop LblMessage.Text =" <P Align=""Center"" dir =""rtl""> خواندن فايل <b>Visitors.xml</b> LblFile.Text = strNodeResult
Catch objError As Exception LblMessage.Text = "<b>* بروز اشکال در خواندن فايل </b>.<br /> " &_ objError.Message & "<br /> " & objError.Source Exit Sub Finally If ( Not reader Is Nothing ) then reader.close End If End Try End Sub </script> <html dir > <form Language="vb" runat="server" > <asp:label id="LblMessage" runat="server" /> <asp:label id="LblFile" runat="server" /> </form> </html> |
مرحله دوم : پس از ذخيره کد فوق در فايلي با نام ReadXmlFile.aspx و اجراي آن ، خروجي زير نمايش داده مي شود .
برگرفته از سايت سخا روش