Анализиране на XML файл с помощта на SAX Parser



Java предоставя многобройни начини за синтактичен анализ на XML файл, като синтактичен анализ на XML файл с помощта на DOM парсер, SAX парсер или StAX парсер.

Java предоставя множество начини за синтактичен анализ на XML файл. Например, анализиране на XML файл с помощта на DOM парсер, SAX парсер или StAX парсер. В тази публикация ще видим как да анализираме XML файл с помощта на SAX парсер





Преди да влезем в подробностите за това как да анализираме XML файлове с помощта на SAX парсер, нека първо видим каква е разликата между анализирането през различни парсери и кога да изберем единия пред другия.

SAX парсер - SAX е съкращение от Simple API за XML. SAX Parser анализира XML файла ред по ред и задейства събития, когато срещне отварящ таг, затварящ маркер или данни за символи в XML файл. Ето защо парсерът SAX се нарича базиран на събития парсер



DOM парсер - DOM е съкращение от Document Object Model. За разлика от SAX парсер DOM парсер зарежда пълния XML файл в паметта и създава дървесна структура, където всеки възел в дървото представлява компонент на XML файл. С DOM парсер можете да създавате възли, да премахвате възли, да променяте съдържанието им и да прекосявате йерархията на възлите. DOM осигурява максимална гъвкавост при работа с XML файлове, но идва с разходи за потенциално голям отпечатък на паметта и значителни изисквания на процесора в случай на големи XML файлове

StAX парсер - StAX е съкращение от Streaming API за XML. Базираните на потока анализатори са много полезни, когато приложението ви има ограничения на паметта. Например мобилен телефон с Java Micro Edition. По същия начин, ако вашето приложение трябва да обработва няколко заявки едновременно, например сървър на приложения, трябва да се използва парсер StAX.

Анализът на базата на потока може допълнително да бъде класифициран като:

Издърпайте разбор - При синтактичен анализ, клиентското приложение извиква методи в XML библиотека за синтактичен анализ, когато трябва да взаимодейства с XML информационен набор. С други думи, клиентът получава XML данни само когато изрично ги поиска.



Натиснете разбор - При синтактичен анализ, XML парсерът избутва XML данни към клиента, когато среща елементи в XML информационен набор. С други думи, парсерът изпраща данните на приложението, независимо дали приложението е готово да го използва или не.

Сравнение между SAX, DOM и StAX парсер:

Таблицата по-долу обобщава характеристиките на синтаксичния анализатор SAX, DOM и StAX

Java_bloge_2

Сега, когато знаем за различните анализатори, нека да видим как да анализираме XML файл с помощта на SAX парсер

XML File
По-долу е XML файлът, който ще анализираме и конструираме Java обекти

The Bourne Identity Doug Liman 119 Matt Damon, Franka Potente 2002 The Bourne Supremacy Paul Greengrass 108 Matt Damon, Franka Potente, Joan Allen 2004 The Bourne Ultimatum Paul Greengrass 115 Matt Damon, Edgar Ramirez, Joan Allen 2007 The Bourne Legacy Tony Gilroy 135 Jeremy Renner , Рейчъл Вайс, Едуард Нортън 2012

Структура на проекта
Ето снимката на екрана на структурата на проекта в Eclipse IDE

Java двойно към int преобразуване

Ето DVD класа, който съдържа списък на филмови обекти

пакет co.edureka.parsers.sax импортиране на java.util.List публичен клас DVD {име на частен низ частен списък филми публичен низ getName () {return име} публична невалидна setName (име на низ) {this.name = name} публичен списък getMovies () {return movies} public void setMovies (Списък на филмите) {this.movies = movies}}

Обектът на филма има свойства като име, режисьори, времетраене (продължителност) на филма, издадена година и състав на филма

пакет co.edureka.parsers.sax публичен клас Movie {private String name private String directors private int runtime private int освободен private String cast public String getName () {return name} public void setName (String name) {this.name = name} public String getDirectors () {return directors} public void setDirectors (String directors) {this.directors = directors} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {върнато освободено} публична невалидна setReleased (int освободена) {this.released = освободена} публичен низ getCast () {return cast} публична невалидна setCast (низ на гласуване) {this.cast = cast} @Override публичен низ toString () { връщане 'Movie [name =' + name + ', director =' + directors + ', runtime =' + runtime + ', освободен =' + освободен + ', cast =' + cast + ']'}}

Внедряване на манипулатора SAX:

Ще разширим org.xml.sax.helpers. Клас DefaultHandler, който предоставя много методи за обратно извикване и ще замени следните методи:

startElement () - Този метод се извиква, когато се срещне начало на таг

endElement () - Този метод се извиква, когато се срещне край на таг

знаци () - Този метод се извиква, когато се срещнат някои текстови данни

Забележка: Има много други методи за обратно извикване като startDocument (), endDocument () и др., Които могат да бъдат заменени, ако е необходимо.

пакет co.edureka.parsers.sax import java.util.ArrayList import java.util.List import org.xml.sax.Attributes import org.xml.sax.helpers.DefaultHandler публичен клас SAXHandler extends DefaultHandler {DVD dvd = new DVD ( ) ListmovieList = new ArrayList () Movie movie = null String content = null public void startElement (String namespaceURI, String localName, String qname, Attributes attributes) {if (qname.equals ('dvd')) {String dvdName = attributes.getValue ('name') dvd.setName (dvdName)} else if (qname.equals ('movie')) {movie = new Movie ()}} public void endElement (String namespaceURI, String localName, String qname) {switch (qname ) {case 'movie': movieList.add (movie) break case 'name': movie.setName (content) break case 'directors': movie.setDirectors (content) break case 'release': movie.setReleased (Integer.parseInt (съдържание)) break case 'runtime': movie.setRuntime (Integer.parseInt (content)) break case 'cast': movie.setCast (content) break case 'dvd': dvd.setMovies (movieList) break}} public void чара cters (char [] ch, int start, int length) {content = new String (ch, start, length)} публичен DVD getDVD () {return dvd}}

Тестване на SAX манипулатора
Сега нека тестваме нашия SAXHandler. По-долу е тестовият клас SAXTest, където първо получаваме екземпляр на SAXParser от SAXParserFactory и извикваме метода на парсиране, който взема два аргумента: Файл и екземпляр на манипулатор.

пакет co.edureka.parsers.sax import java.io.IOException import java.nio.file.Path import java.nio.file.Paths import java.util.List import javax.xml.parsers.ParserConfigurationException import javax.xml.parsers .SAXParser import javax.xml.parsers.SAXParserFactory import org.xml.sax.SAXException public class SAXTest {public static void main (String [] args) хвърля ParserConfigurationException, SAXException, IOException {SAXParserFactory parxserserserfix parserFactor.newSAXParser () SAXHandler манипулатор = нов SAXHandler () Път път = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), манипулатор) DVD dvd = handler.getDVD ( ) Списък на филмите = dvd.getMovies () System.out.println ('Име на DVD:' + dvd.getName ()) за (Филм филм: филми) {System.out.println (филм)}}}

При изпълнение на класа SAXTest ще получите изхода по-долу:

Забележка : Ако се опитвате да анализирате XML файл с различни структури от movies.xml, тогава кодът в методите startElement () и endElement () трябва да бъде променен.

как да хвърля двойно към int в java -

Ако се интересувате да опитате сами кода, изтеглете кода
[buttonleads form_title = ”Код за изтегляне” redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = ”Код за изтегляне”]

Имате въпрос към нас? Моля, споменете го в раздела за коментари и ние ще се свържем с вас.

Подобни публикации: