PracticU

Save Collectoin to XML File

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Save Collectoin to XML File
מילון מושגים:
XML - שפת סימון לייצוג נתונים מובְנים בעזרת תגיות, המשמשת להחלפת מידע בין מערכות ולקובצי הגדרות.
UTF-8 - שיטת קידוד נפוצה של Unicode, שמייצגת כל תו במספר משתנה של בתים ותואמת ל-ASCII.
תגית - סימון בקוד, למשל ב-HTML, שתוחם רכיב ומגדיר את תפקידו או תכונותיו. גם תווית לסימון וקיטלוג פריטים.
מאפיין - תכונה שמצמידים לרכיב ומתארת אותו או את התנהגותו, למשל מאפיין של תגית HTML או שדה באובייקט.
Namespace - מרחב שמות שמקבץ שמות של טיפוסים ורכיבים ומונע התנגשות בין שמות זהים בחלקים שונים של הקוד.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.
דפדפן - תוכנה שמציגה דפי אינטרנט ומריצה את הקוד שבהם, ומאפשרת לגלוש בין אתרים, למשל Chrome או Firefox.

Save Collectoin to XML File
XML הוא פורמט בינלאומי מוכר, ולכן קובץ XML אפשר לשלוח לחברה אחרת והיא תקרא אותו אוטומטית. בשיעור שומרים את אוסף המוצרים ל-XML וטוענים אותו בחזרה.
מבנה הקובץ
קודם יוצרים קובץ XML לדוגמה כדי לראות את היעד: כותרת עם גרסה וקידוד UTF-8 (שמאפשר גם עברית, ערבית ורוסית), תגית שורש products, ותחתיה תגית product לכל מוצר עם name ו-price. אפשר להגדיר את ה-id כ-attribute של product ולא כתגית. הקובץ הזה נועד רק לראות את הפורמט.
כתיבה עם XmlSerializer
1. הכנה: XmlFileManager (שונה מ-TextFileManager) עם סיומת .xml. יוצרים Xml.newSerializer() וקוראים ל-setOutput עם ה-FileWriter.
2. פתיחת מסמך: startDocument עם קידוד UTF-8 ועם standalone (האם המסמך תלוי במסמכים אחרים, ואם לא, true).
3. תגיות: startTag מקבל namespace (מחרוזת ריקה אם לא צריך) ושם. תגית products נפתחת עם attribute בשם count שערכו products.size() כמחרוזת.
4. לכל מוצר: startTag("product"), attribute בשם id, ואז startTag("name"), text(...), endTag("name"). אותו דבר ל-price, כשמספר מומר קודם למחרוזת. בסוף endTag("product").
5. סיום: endTag("products") ו-endDocument.
קריאה עם XmlPullParser
1. הכנה: Xml.newPullParser() ו-setInput עם ה-BufferedReader. נקודת ההתחלה היא תחילת המסמך.
2. ניווט: next() מעביר לתגית הבאה. התגית הראשונה היא products, ממנה קוראים את count עם getAttributeValue.
3. לולאה: for לפי count. בכל סיבוב next() ל-product וקריאת attribute id, ואז next() ל-name ו-nextText() לטקסט, ואז next() ל-price ו-nextText() (עם Double.parseDouble). בונים Product, מוסיפים לרשימה, ועושים next() נוסף כדי להגיע לתגית הסגירה של product.
בדיקה
אחרי הוספת מוצרים, סגירה והרצה מחדש, הרשימה נטענה מהקובץ. הקובץ שנשלף מ-DDMS נראה ב-Notepad++ בשורה אחת. בדפדפן (Internet Explorer בהדגמה) רואים את התגיות, ה-standalone, הקידוד והגרסה מסודרים.
כעת אפשר לשמור ולטעון collection בפורמט XML שאפליקציות וחברות אחרות יכולות לקרוא.
השיעור הבא בקורס: Save Collection to JSON File

פרקי ההרצאה: Save Collectoin to XML File

  1. 00:00

    יתרונות פורמט XML

  2. 00:38

    מבנה קובץ XML לדוגמה

  3. 02:37

    שימוש ב-Attributes בקובץ XML

  4. 03:18

    התאמת המחלקה ל-XmlFileManager

  5. 05:05

    יצירת XmlSerializer ותחילת המסמך

  6. 06:40

    תגית Products עם Attribute count

  7. 08:46

    כתיבת תגיות לכל מוצר

  8. 12:42

    בדיקת קובץ ה-XML שנוצר

תמלול ההרצאה: Save Collectoin to XML File

הטקסט המלא של הדקות הראשונות בהרצאה «Save Collectoin to XML File» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    הטכניקה הבאה שאנחנו הולכים לראות לצורך שמירת מידע וטעינת מידע מקבצים היא שמירה וטעינה מקובץ XML. קובץ XML מסוגל לשמור גם מידע טהור כמו לדוגמה המוצרים שלנו.

  2. 00:17

    היתרון בקובץ XML זה שזה פורמט בינלאומי ידוע שאנחנו יכולים עכשיו לקחת את הקובץ הזה לשלוח אותו לחברה אחרת והיא אוטומטית יכולה לטעון אותו בצורה אוטומטית עם כל מיני פרסרים שמסוגלים לקרוא XML ומיידית לדעת מה המידע בו ולהציג את המידע.

  3. 00:39

    קודם כל בואו נסתכל איך בדיוק אנחנו רוצים לשמור את המידע בפורמט XML. נניח שסתם יש לנו פה איזשהו קובץ שאנחנו מוסיפים, בואו נקרא לו טסט ונבחר XML.

  4. 00:54

    אז יהיה טסט XML והנה אנחנו רואים אותו כאן. אם אנחנו רוצים לשמור מידע לקובץ XML, המידע צריך להיות בפורמט הבא. קודם כל, יש למעלה איזושהי תגית.

  5. 01:06

    האמת, אנחנו ראינו תמיד את התגית הזאת כאן ב-Layouts, זאת בדיוק התגית הזאת, אז אני פשוט אעתיק אותה ואדביק אותה בשביל שאני לא אטעה בתחביר שלה, וזו בעצם הכותרת של ה-XML שמציינת את המספר גרסה שלו ואת הקידוד, UTF-8 מציין שאפשר לרשום בו גם בשפה שהיא לא רק אנגלית, נניח עברית, ערבית, רוסית וכדומה,

  6. 01:34

    ומכאן מתחילות התגיות. אז בואו נניח שיש לנו פה תגית products שמתארת את כל המוצרים, product מתארת מוצר בודד, ID, יש לנו פה את ה-ID, name, יש לנו את השם, ו-price, יש לנו פה את המחיר, וכך אנחנו יכולים לשכפל

  7. 01:57

    את התגיות האלה ולהגדיר בעצם כל מיני מוצרים שנמצאים אצלנו בקובץ. הנה יש לנו פה פיצ', יש לנו מחיר עבור הפיצ', יש לנו כאן ID מספר 3 בננה ויש לנו מחיר עבור הבננה ויש לנו פה קובץ XML שמחזיק רק מידע טהור, אנחנו רוצים לייצר דבר דומה, לשמור אותו,

  8. 02:29

    כך אולי בעתיד אנחנו יכולים לשלוף אותו ולשלוח אותו למישהו אחר וכולם מכירים קובץ XML מבחינת פורמט. קובץ XML יכול להכיל גם אטריביוטס.

  9. 02:41

    לדוגמה אולי את ה-ID אנחנו רוצים להגדיר כאן כאטריביוט במקום כתגית. אז בואו רגע נחליף את זה בצורה כזאת. במקום ש-ID יהיה תגית הוא יהיה אטריביוט הנה יש לנו אפשרות להגדיר גם מאפיינים.

  10. 03:04

    אז בואו נייצר לנו בדיוק את הקובץ הזה, נשמור אותו וגם נטען אותו. קורה לפעמים שאנחנו רוצים באפליקציות לייצר ולטעון קבצי XML. אז יש לנו כאן את הדוגמה שעשינו לגבי הטקסט פייל מנג'ר.

  11. 03:22

    למה אנחנו ממשיכים מהדוגמה הזאת ולא מהדוגמה של הבינארי? מפני ש-XML זה קובץ טקסטואלי, ולכן הוא יותר קרוב לדוגמה הזאת. אז לצורך הדוגמה מה שנעשה זה קודם כל נשנה את השם של הקובץ ל-XML File Manager שיהיה קצת יותר מתאים.

  12. 03:44

    אנחנו לא צריכים את השורה הריקה הזאת, אפשר להיפטר ממנה. הסיומת של הקובץ יותר הגיוני שהוא יהיה XML באותו המקום ומפה אנחנו יכולים להתחיל ולכתוב את הקובץ.

  13. 04:01

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

  14. 04:41

    אוקיי, אז מה יש לנו פה? יש לנו כאן את פונקציית ה-save, יש לנו כאן file writer, זה בדיוק מה שאנחנו צריכים בשביל לרשום מידע טקסטואלי.

  15. 04:51

    הנה יש לנו try, אנחנו מבצעים פתיחה של הקובץ, ומפה אנחנו רוצים בעצם לשמור פורמט XML. אז בואו ניפטר מכל הקוד הזה, ונראה מה אנחנו צריכים לעשות בכדי להתחיל לשמור את המידע בפורמט XML.

  16. 05:12

    הרכיב שאנחנו משתמשים איתו נקרא XML Serializer. בואו נבנה כאן אובייקט שנקרא פשוט XML, שווה ל-XML.newSerializer. זה בעצם יוצר לנו אובייקט שבעזרתו אנחנו יכולים להתחיל לכתוב מידע XMLי לקובץ.

  17. 05:35

    הדבר הראשון שאנחנו צריכים לעשות עם האובייקט שלנו זה Set Output ולתת לו את ה-File Writer כי ה-File Writer מצביע על הקובץ האמיתי.

  18. 05:48

    כל כתיבה שנעשה עכשיו לתוך ה-Serializer יכתוב אותו לתוך הקובץ. הדבר הבא שאנחנו רוצים לעשות זה לכתוב את Start Document שזה בעצם השורה הזאת שראינו פה למעלה.

  19. 06:04

    אתר דוקיומנט שואלת אותנו קודם כל מה שיטת הקידוד שאנחנו רוצים. זה יהיה UTF8 והדבר הבא שהיא שואלת אותנו זה האם המסמך הוא סטנד-אלון. סטנד-אלון זה עוד הגדרה שאנחנו יכולים להגדיר כאן סטנד-אלון.

  20. 06:27

    תכף אנחנו נראה את זה במסמך עצמו. מה זה אומר סטנד-אלון? האם המסמך שלנו תלוי במסמכים אחרים? כן או לא, אם הוא לא תלוי אז זה true, זאת אומרת שהוא stand alone.

  21. 06:43

    הדבר הבא שאנחנו רוצים זה start tag ולהתחיל לכתוב את התגיות עצמן. לכל תגית שאנחנו כותבים אנחנו יכולים לציין name space. name space זה משהו שכבר נתקלנו בו הרבה וזה בעצם הדברים האלה שרואים כאן ושהתפקיד שלהם ולייחד את התגית הזאת, את השם הזה, משמות אחרים שיכולים להיות במהלך הקובץ.

  22. 07:13

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

  23. 07:33

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

  24. 08:00

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

  25. 08:15

    אז בואו נוסיף את האטריביוט, ואין לו name space הוא נקרא count ואנחנו רוצים רק את הvalue שלו. הvalue שלו זה string אז נבצע המרה ל-string וזה יהיה products.size.

  26. 08:34

    מה בעצם השורה הזאת כותבת? השורה הזאת פשוט כותבת את האטריביוט count שווה 3 בתוך תגית הפרודקטס הפתיחה שלה. מכאן אנחנו רוצים לרוץ ב-foreach עבור כל מוצר שיש לנו באוסף המוצרים product אנחנו רוצים להתחיל לכתוב את התגיות שלו.

  27. 09:06

    אז הנה יש לנו פה פתיחת תגית product, אטריביוט עבור ה-id, תגית עבור ה-name, תגית עבור ה-price ואת הסגירות שלהן כולל הסגירה של הפרודקט.

  28. 09:19

    אז בואו נעשה את זה. xml.start.tag כאן אנחנו רוצים תגית שנקראת product.boded xml.attribute.id וה-attribute עצמו יהיה p.getid זה יהיה ה-value שלו.

  29. 09:45

    אני רואה רק ששכחתי לרשום מה כל אחד מציין זה יהיה product.boded זה יהיה id שווה למשהו. גם כאן קאונט שווה למשהו, לא בהכרח שלוש. לאחר מכן אנחנו רוצים עוד סטארט טאג ולרשום name space rec, והתגית נקראת name, כאן אנחנו מקבלים פתיחה של name.

  30. 10:19

    לאחר מכן אנחנו רוצים לרשום מידע טקסטואלי, פה אנחנו פשוט קוראים ל-p.getName וזה יהיה האפ עצמו בואו בעצם כן ניתן כאן ערכים שנוכל לראות פחות או יותר מה המידע שיש לנו לאחר מכן אנחנו רוצים xml end tag ממש שימו לב שאנחנו בונים את הקובץ כפי שאנחנו רואים אותו שם זה סגירה של product בודד end tag מקבלת מה אנחנו רוצים לסגור האמת שזה סוגר את name

  31. 11:09

    לא את פרודקט, end tag אנחנו רוצים לסגור את name, נשכפל את שלושת אלה עבור ה-price, הנה יש לנו פה price כאן וגם כאן, תאשר במקרה שלנו ב-3.5 ויש לנו פה get price, קטע שכל פעם שאנחנו שולחים משהו שהוא לא מחרוזת אנחנו צריכים להמיר את זה למחרוזת.

  32. 11:46

    ולבסוף אנחנו רוצים end tag עבור product עצמו, זה סוגר לנו את product, וכאן אנחנו ביצענו שמירה של כל המוצרים. לבסוף אנחנו רוצים to end tag של כל הproducts כולם, זה יהיה הסגירה האחרונה הזאת שאנחנו רואים פה של כל התגיות, כי בהתחלה כאן פתחנו תגית product,

  33. 12:25

    אנחנו סוגרים אותה ואנחנו רוצים עוד אחד שזה נקרא end document שמסיים את כל המסמך והנה יש לנו את כל התגיות בקובץ. מה שאנחנו הולכים לקבל זה קובץ שהוא מאוד דומה לקובץ הזה כתלות במידע שאנחנו נכניס.

  34. 12:47

    בואו בשלב הזה נריץ בכדי לראות איך נראה הקובץ ורק אחר כך נעבור לקריאה עצמה. אז אנחנו מריצים, בואו נוסיף פריטים, נלך ל-add product, green apple, נוסיף, ניגש ל-round pitch, נוסיף אותו, ניגש ל-sweet banana,

  35. 13:27

    נוסיף אותה ונצא מהאפליקציה וניגש ל-DDMS, נאתר את האפליקציה שלנו, נראה את קובץ ה-XML ונשלוף אותו למחשב. ניגש לקובץ, אם אנחנו נפתח אותו עם לדוגמה Notepad++ אנחנו נראה את כל המידע בשורה אחת וזה בסדר, ככה בעצם זה קובץ XML שהוא יחסית מצומצם, אבל אנחנו יכולים לבצע פתיחה של הקובץ על ידי תוכנה שמסוגלת להציג קובץ בצורה קצת יותר

  36. 14:08

    טובה, לדוגמה אינטרנט אקספלורר עושה את זה טוב,

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: Save Collection to Binary File

ההרצאה הבאה: Save Collection to JSON File

הרצאות קשורות מקורסים אחרים

  • LINQ ל- XML
  • transaction save point
  • Importing File
  • Create File

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון