منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : معلومة ::: Navigate Xml File By XPath Navigator
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
كاتب الموضوع : BADRMEDIA



أحياناً ممكن نحفظ جداول بيانات فى صورة Xml لكن كيف نتصفح هذه البيانات بطريقة من الطرق

سنتعرف على العنصر XPath

لنقوم بذلك

أريدك أن تنشأ ملف Xml على القرص المحلي C مباشرة باسم BADRMEDIA.Xml

وتجعل محتواه هذا الكود



كود :
[color=#000080]<?xml version=[COLOR=#0000ff]"1.0"[/color] encoding=[color=#0000ff]"utf-8"[/color]?>[/COLOR]
[color=#000080]<address_list>[/color]
[color=#000080]<personal_data id=[COLOR=#0000ff]"ID12345"[/color]>[/COLOR]
[color=#000080]<zip>[/color]123-4567[color=#000080]</zip>[/color]
[color=#000080]<address>[/color]VB4ARAB[color=#000080]</address>[/color]
[color=#000080]<name>[/color]nono[color=#000080]</name>[/color]
[color=#000080]<age>[/color]34[color=#000080]</age>[/color]
[color=#000080]</personal_data>[/color]
[color=#000080]<personal_data id=[COLOR=#0000ff]"ID00234"[/color]>[/COLOR]
[color=#000080]<zip>[/color]765-4321[color=#000080]</zip>[/color]
[color=#000080]<address>[/color]BADRMEDIA[color=#000080]</address>[/color]
[color=#000080]<name>[/color]OzOz[color=#000080]</name>[/color]
[color=#000080]<age>[/color]28[color=#000080]</age>[/color]
[color=#000080]</personal_data>[/color]
[color=#000080]<personal_data id=[COLOR=#0000ff]"ID32401"[/color]>[/COLOR]
[color=#000080]<zip>[/color]000-1111[color=#000080]</zip>[/color]
[color=#000080]<address>[/color]AHMED[color=#000080]</address>[/color]
[color=#000080]<name>[/color]ANDY[color=#000080]</name>[/color]
[color=#000080]<age>[/color]40[color=#000080]</age>[/color]
[color=#000080]</personal_data>[/color]
[color=#000080]</address_list>[/color]



كيف نقوم بربط التصفح بهذا الملف

نضع زر امر Button ونضع هذا الكود تحت الحدث له



كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Try

Dim xmlDoc As New System.Xml.XPath.XPathDocument("C:\BADRMEDIA.xml")

Dim xNavi As System.Xml.XPath.XPathNavigator = _
xmlDoc.CreateNavigator()

Catch ex As Exception
MsgBox("" & ex.Message & "", MsgBoxStyle.Exclamation + MsgBoxStyle.MsgBoxRtlReading + MsgBoxStyle.MsgBoxRight, "BADRMEDIA SoftWare ")
End Try

End Sub

استخدمنا العنصر XPathDocument من داخل العنصر XPath لربطه بملف Xml

ثم استخدمنا العنصر XPathNavigator ليقوم بالتصفح من داخل العنصر XPath

الآن هنبدأ نتصفح عنصر معين ولنري هذا الكود



كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Try

Dim xmlDoc As New System.Xml.XPath.XPathDocument("C:\BADRMEDIA.xml")

Dim xNavi As System.Xml.XPath.XPathNavigator = _
xmlDoc.CreateNavigator()


' الجزء الجديد

Dim ite As System.Xml.XPath.XPathNodeIterator = _
xNavi.Evaluate("//personal_data/name")

While (ite.MoveNext())
MsgBox(ite.Current.ToString())
End While

Catch ex As Exception
MsgBox("" & ex.Message & "", MsgBoxStyle.Exclamation + MsgBoxStyle.MsgBoxRtlReading + MsgBoxStyle.MsgBoxRight, "BADRMEDIA SoftWare ")
End Try

End Sub

استخدمنا العنصر XPathNodeIterator لنربطه بعنصر من ملف التصفح

//personal_data/name

ونبدأ فى عرض بيانات العنصر - صف صف




فى المثال السابق تصفحنا عنصر محدد

لكن ماذا لو أردنا عرض جزء Xml بدلالة عنصر محدد

ممكن ذلك لنري هذا الكود


كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Try

Dim xmlDoc As New System.Xml.XPath.XPathDocument("C:\BADRMEDIA.xml")

Dim xNavi As System.Xml.XPath.XPathNavigator = _
xmlDoc.CreateNavigator()

Dim ite As System.Xml.XPath.XPathNodeIterator = _
xNavi.Evaluate("//personal_data[@id='ID00234']")


While (ite.MoveNext())
MsgBox(ite.Current.InnerXml())
End While

Catch ex As Exception
MsgBox("" & ex.Message & "", MsgBoxStyle.Exclamation + MsgBoxStyle.MsgBoxRtlReading + MsgBoxStyle.MsgBoxRight, "BADRMEDIA SoftWare ")
End Try

End Sub

فى عرض التصفح حددنا التصفح بدلالة معينة وهى //personal_data[@id='ID00234']

ولعرض جزء Xml نستخدم الدالة InnerXml


كود :
MsgBox(ite.Current.InnerXml())
ممكن تجعل التصفح يعود لك بعدد السجلات التى وجدت بالشرط السايق

//personal_data[@id='ID00234']


نستخدم الدالة Count للعنصر


كود :
MsgBox(ite.Count())





ماذا لو أردت مجموع حقل معين

لنري هذا الكود



كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Try

Dim xmlDoc As New System.Xml.XPath.XPathDocument("C:\BADRMEDIA.xml")

Dim xNavi As System.Xml.XPath.XPathNavigator = _
xmlDoc.CreateNavigator()

Dim intSum = xNavi.Evaluate("sum(//personal_data/age/text())")
MsgBox("مجموع الأعمار" & intSum)

Catch ex As Exception
MsgBox("" & ex.Message & "", MsgBoxStyle.Exclamation + MsgBoxStyle.MsgBoxRtlReading + MsgBoxStyle.MsgBoxRight, "BADRMEDIA SoftWare ")
End Try

End Sub


جعلنا التصفح بمجموع حقل العمر Age ثم عرضنا النتيجة فى رسالة