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 () : връща итератор на атрибутите на текущото събитие
4. Внедряване на опростен XML парсер
Излишно е да казвам, че първата стъпка за анализиране на XML е да го прочетете. Нуждаем се от XMLInputFactory, за да създадем XMLEventReader за четене на нашия файл:
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); XMLEventReader reader = xmlInputFactory.createXMLEventReader(new FileInputStream(path));
Сега, когато XMLEventReader е готов, ние се придвижваме напред през потока със nextEvent () :
while (reader.hasNext()) { XMLEvent nextEvent = reader.nextEvent(); }
След това първо трябва да намерим желания начален маркер:
if (nextEvent.isStartElement()) { StartElement startElement = nextEvent.asStartElement(); if (startElement.getName().getLocalPart().equals("desired")) { //... } }
Следователно можем да четем атрибутите и данните:
String url = startElement.getAttributeByName(new QName("url")).getValue(); String name = nextEvent.asCharacters().getData();
Също така можем да проверим дали сме достигнали до краен маркер:
if (nextEvent.isEndElement()) { EndElement endElement = nextEvent.asEndElement(); }
5. Пример за разбор
За да получите по-добро разбиране, нека стартираме нашия анализатор на примерен XML файл:
Baeldung Online Courses Online Example Examples Offline Localhost Tests Offline
Нека анализираме XML и съхраняваме всички данни в списък на обекти на обекти, наречени уебсайтове :
while (reader.hasNext()) { XMLEvent nextEvent = reader.nextEvent(); if (nextEvent.isStartElement()) { StartElement startElement = nextEvent.asStartElement(); switch (startElement.getName().getLocalPart()) { case "website": website = new WebSite(); Attribute url = startElement.getAttributeByName(new QName("url")); if (url != null) { website.setUrl(url.getValue()); } break; case "name": nextEvent = reader.nextEvent(); website.setName(nextEvent.asCharacters().getData()); break; case "category": nextEvent = reader.nextEvent(); website.setCategory(nextEvent.asCharacters().getData()); break; case "status": nextEvent = reader.nextEvent(); website.setStatus(nextEvent.asCharacters().getData()); break; } } if (nextEvent.isEndElement()) { EndElement endElement = nextEvent.asEndElement(); if (endElement.getName().getLocalPart().equals("website")) { websites.add(website); } } }
За да получим всички свойства на всеки уебсайт, ние проверяваме startElement.getName (). GetLocalPart () за всяко събитие. След това задаваме съответното свойство съответно.
Когато достигнем крайния елемент на уебсайта, знаем, че обектът ни е завършен, затова добавяме обекта към списъка с уебсайтове .
6. Заключение
В този урок научихме как да анализираме XML файл, използвайки StAX библиотека .
Примерният XML файл и пълният код за парсер са налични, както винаги, в Github.