ניתוח קובץ XML באמצעות StAX

1. הקדמה

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

2. ניתוח עם StAX

StAX היא אחת מכמה ספריות ה- XML ​​ב- Java. זוהי ספרייה חסכונית בזיכרון הכלולה ב- JDK מאז Java 6. StAX לא טוען את כל ה- XML ​​בזיכרון. במקום זאת, הוא שולף נתונים מזרם באופן קדימה בלבד. הזרם נקרא על ידי XMLEventReader לְהִתְנַגֵד.

3. XMLEventReader מעמד

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

  • isStartElement (): בודק אם האירוע הנוכחי הוא א StartElement (תגית התחלה)
  • isEndElement (): בודק אם האירוע הנוכחי הוא EndElement (תג סיום)
  • asCharacters (): מחזיר את האירוע הנוכחי כתווים
  • getName (): מקבל את שם האירוע הנוכחי
  • getAttributes (): מחזירה an איטרטור ממאפייני האירוע הנוכחי

4. יישום מנתח XML פשוט

למותר לציין שהצעד הראשון לנתח XML הוא לקרוא אותו. אנחנו צריכים XMLInputFactory ליצור XMLEventReader לקריאת הקובץ שלנו:

XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance (); XMLEventReader reader = xmlInputFactory.createXMLEventReader (FileInputStream חדש (נתיב));

עכשיו כשה- XMLEventReader מוכן, אנחנו מתקדמים דרך הזרם עם האירוע הבא():

בעוד (reader.hasNext ()) {XMLEvent nextEvent = reader.nextEvent (); }

בשלב הבא עלינו למצוא תחילה את תג ההתחלה הרצוי:

אם (nextEvent.isStartElement ()) {StartElement startElement = nextEvent.asStartElement (); אם (startElement.getName (). getLocalPart (). שווה ("רצוי")) {// ...}}

כתוצאה מכך, אנו יכולים לקרוא את התכונות והנתונים:

מחרוזת url = startElement.getAttributeByName (חדש QName ("url")). GetValue (); שם מחרוזת = nextEvent.asCharacters (). GetData ();

אנחנו יכולים גם לבדוק אם הגענו לתג סיום:

אם (nextEvent.isEndElement ()) {EndElement endElement = nextEvent.asEndElement (); }

5. דוגמה לניתוח

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

   Baeldung קורסים מקוונים דוגמאות מקוונות דוגמאות לא מקוון בדיקות מקומיות 

בואו לנתח את ה- XML ​​ולאחסן את כל הנתונים ברשימה של אובייקטים של ישויות הנקראים אתרים:

בעוד (reader.hasNext ()) {XMLEvent nextEvent = reader.nextEvent (); אם (nextEvent.isStartElement ()) {StartElement startElement = nextEvent.asStartElement (); החלף (startElement.getName (). getLocalPart ()) {מקרה "אתר": אתר = אתר חדש (); תכונת url = startElement.getAttributeByName (QName חדש ("url")); אם (url! = null) {website.setUrl (url.getValue ()); } לשבור; מקרה "שם": nextEvent = reader.nextEvent (); website.setName (nextEvent.asCharacters (). getData ()); לשבור; מקרה "קטגוריה": nextEvent = reader.nextEvent (); website.setCategory (nextEvent.asCharacters (). getData ()); לשבור; case "status": nextEvent = reader.nextEvent (); website.setStatus (nextEvent.asCharacters (). getData ()); לשבור; }} אם (nextEvent.isEndElement ()) {EndElement endElement = nextEvent.asEndElement (); אם (endElement.getName (). getLocalPart (). שווה ("אתר")) {websites.add (אתר); }}}

כדי לקבל את כל המאפיינים של כל אתר, אנו בודקים startElement.getName (). getLocalPart () לכל אירוע. לאחר מכן הגדרנו את המאפיין המתאים בהתאם.

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

6. מסקנה

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

קובץ ה- XML ​​לדוגמא וקוד המנתח המלא זמינים, כמו תמיד, ב- Github.


$config[zx-auto] not found$config[zx-overlay] not found