קריאת Xml
ישנן 2 דרכים עיקריות השונות במהותן לעבודה עם xml. יש את השימוש ב XmlDocument ששם בעצם אנו קוראים את כל הקובץ לזיכרון ואז מתחילים לעבוד ויש את השיטה של Reader שבה אנו בעצם קוראים שורה שורה מהקובץ, יש הרבה מידע בגוגל מי שירצה יראה, בואו רק נראה את הקוד הפשוט לקריאת xml באמצעות reader
לצורך הדוגמה יצרתי סטרינג שמכיל את המידע , אך ניתן כמובן לקרוא מקובץ
string myXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<bookstore>" +
"<book isbn=\"23534\">" +
"<name>book1</name>" +
"<price>34</price>" +
"</book>" +
"<book isbn=\"9999\">" +
"<name>book2</name>" +
"<price>71</price>" +
"</book>" +
"</bookstore>";
XmlTextReader לא יודע לקרוא מידע מסטרינג ולכן נשתמש ב StringReader שמקבל כפרמטר את הסטרינג שלנו
System.IO.StringReader sr = new S System.IO.StringReader(myXml);
System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader(sr);
ואפשר להתחיל לקרוא...
while (reader.Read())
{
}
הלולאה תרוץ עד שלא יהיה לו מה לקרוא
כעת בתוך הלולאה לפני שקוראים את המידע מכל אלמנט, אנו צריכים לוודא שזהו אכן אלמנט, שכן ה reader שלנו מחזיר כל שורה כולל שורות ריקות וסיום של אלמנטים שאין לנו מה לעשות איתם
if (reader.NodeType == System.Xml.XmlNodeType.Element)
{
}
ואז ניתן לעבוד עם המידע שבו. נניח שאנו מחפשים ספר עם מספר מזהה של 9999, קודם נבדוק שיש לנו ספר ולא אלמנט אחר
if (reader.Name == "book")
{
}
וכעת נשווה את המאפיין שאנו רוצים
if (reader.AttributeCount > 0 && reader.GetAttribute("isbn")=="9999")
{
}
מצאנו, וכעת אנו רוצים להציג את השם והמחיר שלו. היינו יכולים פשוט לכתוב reader.Read() ואז היינו מגיעים לאלמנט של השם ומושכים את הערך, אבל בואו נגיד שאנחנו לא יודעים את הסדר שבו מופיעים הנתונים בתוך כל ספר. לשם כך נבקש מה reader שלנו את כל התוכן של הספר בתור reader נפרד ואז עליו נרוץ ונאסוף את המידע על הספר שלנו
System.Xml.XmlReader subReader = reader.ReadSubtree();
ונרוץ עליו כמו שרצנו על ה reader הכללי:
while (subReader.Read())
{
if (subReader.NodeType == System.Xml.XmlNodeType.Element)
{
switch (subReader.Name)
{
case "name":
Console.WriteLine("Book name : " + subReader.ReadString());
break;
case "price":
Console.WriteLine("Book price : " + subReader.ReadString());
break;
}
}
}
זהו... בתוך כל ספר אנו בעצם בוחנים את כל המידע עליו, ברגע שמצאנו את השם או המחיר אנו מושכים את הערץ בעזרת הפונקציה ReadString()
דרך אגב, יש פונקציות שונות לקרוא ערך, ניתן ישירות לקרוא אותו בתור int או כל סוג אחר של מידע, יש שם רשימה של פונקציות...
להורדת הפרוייקט