Рашчлањивање КСМЛ датотеке помоћу САКС парсера



Јава нуди бројне начине за рашчлањивање КСМЛ датотеке попут рашчлањивања КСМЛ датотеке помоћу ДОМ парсера, САКС парсера или СтАКС парсера.

Јава нуди бројне начине за рашчлањивање КСМЛ датотеке. На пример, рашчлањивање КСМЛ датотеке помоћу ДОМ парсера, САКС парсера или СтАКС парсера. У овом посту ћемо видети како рашчланити КСМЛ датотеку помоћу САКС парсера





Пре него што уђемо у детаље о томе како да рашчланимо КСМЛ датотеке помоћу САКС парсера, прво да видимо која је разлика између рашчлањивања кроз различите рашчлањиваче и када треба изабрати један од другог.

САКС Парсер - САКС је скраћеница од Симпле АПИ фор КСМЛ. САКС Парсер анализира КСМЛ датотеку ред по ред и покреће догађаје када наиђе на отварање ознаке, затварање ознаке или податке о знаковима у КСМЛ датотеци. Због тога се САКС парсер назива парсером заснован на догађајима



ДОМ Парсер - ДОМ је скраћеница од Доцумент Објецт Модел. За разлику од САКС парсера, ДОМ парсер учитава комплетну КСМЛ датотеку у меморију и ствара структуру стабла где сваки чвор у стаблу представља компоненту КСМЛ датотеке. Помоћу ДОМ парсера можете створити чворове, уклонити чворове, променити њихов садржај и прећи хијерархију чворова. ДОМ пружа максималну флексибилност током рада са КСМЛ датотекама, али долази са трошковима потенцијално великог отиска меморије и значајних захтева процесора у случају великих КСМЛ датотека

СтАКС Парсер - СтАКС је скраћеница за Стреаминг АПИ за КСМЛ. Анализатори засновани на току су веома корисни када ваша апликација има ограничења меморије. На пример, мобилни телефон који покреће Јава Мицро Едитион. Слично томе, ако ваша апликација треба истовремено да обрађује неколико захтева, на пример сервер апликација, треба користити СтАКС парсер.

Анализирање засновано на току може се даље класификовати као:

Пулл Парсинг - У рашчлањивању повлачењем, клијентска апликација позива методе у КСМЛ библиотеци рашчлањивања када треба да ступи у интеракцију са КСМЛ информацијским скупом. Другим речима, клијент добија КСМЛ податке само када их изричито тражи.



Пусх Парсинг - У пусх рашчлањивању, КСМЛ парсер је тај који КСМЛ податке потискује клијенту када наиђе на елементе у КСМЛ инфо скупу. Другим речима, парсер шаље податке апликацији без обзира на то да ли је апликација спремна да их користи или не.

Поређење САКС, ДОМ и СтАКС парсера:

Доња табела сумира карактеристике САКС, ДОМ и СтАКС парсера

Java_bloge_2

Сад кад знамо за различите парсере, погледајмо како да рашчланите КСМЛ датотеку помоћу САКС парсера

шта је прекид реда у хтмл-у

КСМЛ датотека
Испод је КСМЛ датотека коју ћемо рашчланити и конструисати Јава објекте

Боурнеов идентитет Доуг Лиман 119 Матт Дамон, Франка Потенте 2002 Тхе Боурне Супремаци Паул Греенграсс 108 Матт Дамон, Франка Потенте, Јоан Аллен 2004 Тхе Боурне Ултиматум Паул Греенграсс 115 Матт Дамон, Едгар Рамирез, Јоан Аллен 2007 Тхе Боурне Легаци Тони Гилрои 135 Јереми Реннер , Рацхел Веисз, Едвард Нортон 2012

Структура пројекта
Ево снимка екрана структуре пројекта у Ецлипсе ИДЕ

Ево ДВД класе која садржи листу филмских предмета

пакет цо.едурека.парсерс.сак импорт јава.утил.Лист јавна класа ДВД {име приватног низа приватно Листа филмова јавно Стринг гетНаме () {ретурн име} јавна празнина сетНаме (име низа) {тхис.наме = наме} јавна листа гетМовиес () {ретурн мовиес} јавни воид сетМовиес (Листа филмова) {тхис.мовиес = мовиес}}

Објекат филма има својства као што су име, редитељи, време извођења (трајање) филма, година издања и улога филма

пакет цо.едурека.парсерс.сак јавна класа Филм {име приватног низа приватно Директори низа приватно инт рунтиме приватно инт објављено приватно Стринг цаст публиц Стринг гетНаме () {ретурн наме} публиц воид сетНаме (име низа) {тхис.наме = наме} јавни Стринг гетДирецторс () {ретурн директори} публиц воид сетДирецторс (директори низа) {тхис.дирецторс = дирецторс} публиц инт гетРунтиме () {ретурн рунтиме} публиц воид сетРунтиме (инт рунтиме) {тхис.рунтиме = рунтиме} публиц инт гетРелеасед ( ) {повратак објављен} јавна празнина сетРелеасед (инт издано) {тхис.релеасед = објављено} јавна стринг гетЦаст () {ретурн цаст} јавна празнина сетЦаст (Стринг цаст) {тхис.цаст = цаст} @Оверриде публиц Стринг тоСтринг () { повратак 'Филм [име =' + име + ', директори =' + директори + ', време извршавања =' + време извођења + ', објављено =' + објављено + ', цаст =' + цаст + ']'}}

Имплементација САКС руковаоца:

Проширићемо орг.кмл.сак.хелперс. Класа ДефаултХандлер која пружа многе методе повратног позива и надјачаће следеће методе:

стартЕлемент () - Ова метода се позива када се наиђе на почетак ознаке

ендЕлемент () - Ова метода се позива када се наиђе на крај ознаке

знакова () - Ова метода се позива када се нађу неки текстуални подаци

Напомена: Постоји много других метода повратног позива, попут стартДоцумент (), ендДоцумент () итд., Које се по потреби могу надјачати.

пакет цо.едурека.парсерс.сак импорт јава.утил.АрраиЛист импорт јава.утил.Лист импорт орг.кмл.сак.Аттрибутес импорт орг.кмл.сак.хелперс.ДефаултХандлер јавна класа САКСХандлер протеже ДефаултХандлер {ДВД двд = нови ДВД ( ) ЛистмовиеЛист = нев АрраиЛист () Мовие мовие = нулл Стринг цонтент = нулл публиц воид стартЕлемент (Стринг намесУРИ, Стринг лоцалНаме, Стринг кнаме, Атрибути атрибути) {иф (кнаме.екуалс ('двд')) {Стринг двдНаме = аттрибутес.гетВалуе ('наме') двд.сетНаме (двдНаме)} елсе иф (кнаме.екуалс ('мовие')) {мовие = нев Мовие ()}} публиц воид ендЕлемент (Стринг намеспацеУРИ, Стринг лоцалНаме, Стринг кнаме) {свитцх (кнаме ) {цасе 'мовие': мовиеЛист.адд (мовие) бреак цасе 'наме': мовие.сетНаме (цонтент) бреак цасе 'дирецторс': мовие.сетДирецторс (цонтент) бреак цасе 'релеасе': мовие.сетРелеасед (Интегер.парсеИнт (садржај)) случај случаја 'рунтиме': мовие.сетРунтиме (Интегер.парсеИнт (садржај)) случај случаја 'цаст': мовие.сетЦаст (садржај) случај случаја 'двд': двд.сетМовиес (филмЛист) бреак}} публиц воид цхара цтерс (цхар [] цх, инт старт, инт ленгтх) {цонтент = нев Стринг (цх, старт, ленгтх)} јавни ДВД гетДВД () {ретурн двд}}

Тестирање САКС руковаоца
Сада тестирајмо наш САКСХандлер. Испод је тест класа САКСТест где прво добијамо инстанцу САКСПарсер из САКСПарсерФацтори и позивамо методу парсе која узима два аргумента: Филе и инстанцу руковаоца.

шта је ограничење примарног кључа
пакет цо.едурека.парсерс.сак импорт јава.ио.ИОЕкцептион импорт јава.нио.филе.Патх импорт јава.нио.филе.Патхс импорт јава.утил.Лист импорт јавак.кмл.парсерс.ПарсерЦонфигуратионЕкцептион импорт јавак.кмл.парсерс .САКСПарсер импорт јавак.кмл.парсерс.САКСПарсерФацтори импорт орг.кмл.сак.САКСЕкцептион јавна класа САКСТест {публиц статиц воид маин (Стринг [] аргс) баца ПарсерЦонфигуратионЕкцептион, САКСЕкцептион, ИОЕкцептион {САКСПарсерФацтор парксерсерсерфик парсерФацтор.невСАКСПарсер () САКСХандлер руковатељ = нови САКСХандлер () Путања пута = Патхс.гет ('срц / ресоурцес', 'мовиес.кмл') парсер.парсе (патх.тоФиле (), хандлер) ДВД двд = хандлер.гетДВД ( ) Листа филмова = двд.гетМовиес () Систем.оут.принтлн ('Име ДВД-а:' + двд.гетНаме ()) за (Филмски филм: филмови) {Систем.оут.принтлн (филм)}}}

Извршавањем класе САКСТест добићете доњи излаз:

Белешка : Ако покушавате да рашчланите КСМЛ датотеку са различитим структурама из филма.кмл, тада треба променити код у методама стартЕлемент () и ендЕлемент ().

Ако сте заинтересовани да сами испробате код, преузмите га
[буттонлеадс форм_титле = ”Преузми код” редирецт_урл = хттпс: //едурека.вистиа.цом/медиас/ст5гг7рп15 цоурсе_ид = 44 буттон_тект = ”Преузми код”]

Имате питање за нас? Молимо вас да то споменете у одељку за коментаре и јавићемо вам се.

Повезани постови: