منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
معلومة ::: Navigate Xml File By XPath Navigator - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184)
+--- الموضوع : معلومة ::: Navigate Xml File By XPath Navigator (/showthread.php?tid=5293)



معلومة ::: Navigate Xml File By XPath Navigator - RaggiTech - 06-10-12

كاتب الموضوع : 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




معلومة ::: Navigate Xml File By XPath Navigator - RaggiTech - 06-10-12

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



كود :
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

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







معلومة ::: Navigate Xml File By XPath Navigator - RaggiTech - 06-10-12

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

لكن ماذا لو أردنا عرض جزء 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())



معلومة ::: Navigate Xml File By XPath Navigator - RaggiTech - 06-10-12

ممكن تجعل التصفح يعود لك بعدد السجلات التى وجدت بالشرط السايق

//personal_data[@id='ID00234']


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


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








معلومة ::: Navigate Xml File By XPath Navigator - RaggiTech - 06-10-12

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

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



كود :
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 ثم عرضنا النتيجة فى رسالة