ASP.NET ו XML

‏ • 9 בדצמבר, 2003

xml היא שפה לייצוג נתונים ברשת, שפה זו כה פופולרית משום שהיא מתגברת על בעיות רבות כמו אבטחה, גישה לנתונים, המרת נתונים ועוד הרבה.
בשל כך asp.net נוצרה עם התמקדות בשפה זו.

ראשית נכין לנו קובץ xml שעליו נעבוד:users.xml

<Users>
    <user gender="זכר">
        <name>ירדן</name>
        <password>1234</password>
    </user>
    <user gender="זכר">
        <name>עידן</name>
        <password>עידןעידן</password>
    </user>
    <user gender="נקבה">
        <name>שחר</name>
        <password>שחר32</password>
    </user>
</Users>

קריאת קובץ xml באמצעות XmlTextReader

לצורך השוואה, האובייקט XmlTextReader דומה לאובייקט OleDbDataReader מכיוון שהוא לא עובד כמו dataset ולא שומר את הנתונים, אלא עובר אליהם פעם אחת.

בשביל לקרוא את קובץ הxml נשתמש בשיטה read() ונעבור בלולאה על כל הקובץ.

דוגמה לשימוש:

<%@ Import Namespace =system.xml %>

<script runat =server >
  Sub page_load(ByVal obj As Object, ByVal e As EventArgs)
    
     Dim reader1 As XmlTextReader
     reader1 = New XmlTextReader(Server.MapPath("users.xml"))
     
     While reader1.Read
         
         If reader1.HasAttributes Then
             lbl1.Text += "<hr>" + reader1.GetAttribute(0) + "<BR />"
         End If
             
         If reader1.NodeType = XmlNodeType.Text Then
             lbl1.Text += reader1.Value + "<br />"
         End If

     End While
     
     reader1.Close()
  End Sub

</script>
<html >
   <body dir =rtl>
        <asp:Label ID=lbl1 runat =server ></asp:Label>
   </body>
</html>

תחילה יבאנו את מרחב השמות system.xml שמכיל את האובייקט xmlTextReader.בשגרה page_load הגדרנו את reader1 כ xmltextreader וסיפקנו לו את הקובץ Users.xml.

בשביל לשלוף את הנתונים עברנו בלולאה על האובייקט בעזרת התכונה read ועשינו את השלבים הבאים:

משפט תנאי ראשון שואל האם יש תכונה לתגית שעליה הלולאה עוברת כעת, אם כן זה אומר כי אנו בתגית user ואז אנו שולפים את התכונה gender.
במשפט תנאי השני אנו שואלים האם סוג התגית היא טקסט-כלומר האם תחום בה טקסט כלשהו, אם כן נציג את הערך שלו.
לבסוף סגרנו את האובייקט, והינה התוצאה:



אם קיימות לתגית מספר תכונות בלתי ידוע, נעבור עליהן בלולאה באופן הבא:

dim i as integer
for i=0 to reader1.attributeCount-1
 response.write(reader1.gerAttribute(i))
next 

להלן סוגי הצמתים המרכזיים:

  • text-מכיל טקסט
  • element-פריט כלשהו
  • endtag-סוף פריט
  • document-שורש העץ
  • xmkDeclaration-הצהרת xml

כתיבת קובץ xml באמצעות XmlTextWriter

אובייקט זה קל ונוח נורא לשימוש, בעזרתו ניתן לכתוב דפי xml בפשטות רבה.
דוגמה לשימוש:

<%@ Import Namespace =system.xml %>
<script runat =server >
  Sub page_load(ByVal obj As Object, ByVal e As EventArgs)
     Dim writer1 As XmlTextWriter
     writer1 = New XmlTextWriter(Server.MapPath("users1.xml"), Nothing)
     
     writer1.WriteStartDocument()
     writer1.Formatting = Formatting.Indented
     writer1.Indentation = 5
     writer1.IndentChar = " "
     
     writer1.WriteStartElement("Users")
     writer1.WriteStartElement("user")
     writer1.WriteAttributeString("gender", "זכר")
     writer1.WriteElementString("name", "ירדן")
     writer1.WriteEndElement()
     writer1.WriteEndElement()
     writer1.Flush()
     writer1.Close()
     
  End Sub
</script>  

גם כאן תחילה יבאנו את מרחב השמות system.xml אשר מכיל את האובייקט שלנו.בשגרה page_load הגדרנו אובייקט writer1 מסוג xmlTextWriter וקעבנו כי שמו יהיה users1.xml. הnothing הוא הקידוד שקעבנו שלא יהיה אחד כזה.
לאחר מכן התחלנו בכמה הגדרות בסיסיות:

הפעלנו את writeStartDocument המדפיס את הצהרת הxml :

 <?xml version="1.0"?>  

לאחר מכן סוג הפורמט יהיה עם זיח. ומרחק של 5.

ההגדרה של סימן הזיח היא אפשרות בלבד ,וכאן קבענו שזהו יהיה רווח רגיל.

אחר כך מתחיל כתיבת המסמך:

מתחילים עם element Users,לאחר מכן אלמנט user, נותנים לו תכונה gender בעלת ערך :זכר. אחר כך אלמנט טקסט שיכיל את השם וסגירת התגיות.
יש לשים לב שכל התגיות שהם אלמנטים נסגרו.

לבסוף מפעילים flush אשר דומה לזה של האובייקט response אלא שכאן הוא עובד על קובץ ולא הדפדפן.וסוגרים את האובייקט.

והינה הפלט:users1.xml

XMLו DataSet

מיכוון שבלאו הכי dataSet שומר את הנתונים שלו בצורת xml קל נורא לקשר בין השניים.בעזרת שימוש באובייקט xmlDataDocument ניתן לעביר קובץ xml ל DataSet בקלות רבה.
הינה דוגמה פשוטה:

 <%@ Import Namespace =system.xml %>
<%@ Import Namespace =system.data %>
<script runat =server >
  Sub page_load(ByVal obj As Object, ByVal e As EventArgs)
     Dim xmldoc1 As New XmlDataDocument
     xmldoc1.DataSet.ReadXml(Server.MapPath("users.xml"))
     dg1.datasource = xmldoc1.DataSet
     dg1.DataBind()
  End Sub

</script>
<html>
<body >
     <asp:DataGrid runat =server ID=dg1></asp:DataGrid>
</body>
</html>

תחילה יבאנו שני מרחבי שמות:system.xml בשביל xmldataDocument ו system.data בשביל dataset.
לאחר מכאן יצרנו אובייקט xmlDataDocument בשם xmldoc1.לאחר מכן השתמשנו בשיטה readxml של הdataset בכדי להעביר לו את כל הנתונים.יצרנו datagrid,קבענו כי המקור נתונים שלה יהיה הdataset שיצרנו, והינה התוצאה:



כפי שאתם רואים ניתן לשלב בין dataset לxml בצורה מאד פשוטה.

תגיות: , ,

תגובות בפייסבוק