Реклама

Да ли бисте желели да научите како да читате и пишете КСМЛ датотеку из Јаве?

КСМЛ датотеке Шта је КСМЛ датотека и како је можете отворити и користити?Можда сте видели термин „КСМЛ“. Можда сте чак и случајно отворили КСМЛ датотеку. Шта је КСМЛ и како га користите? Опширније се користе у различите сврхе укључујући складиштење података. Пре него што је ЈСОН постао популаран, КСМЛ је био преферирани формат за представљање, складиштење и транспорт структурираних података. Иако је популарност КСМЛ-а опала последњих година, можете га повремено срести, па је важно да научите како да радите са њим из кода.

Јава стандардно издање (СЕ) 10 основних Јава концепата које треба да научите када почнетеБило да пишете ГУИ, развијате софтвер на страни сервера или мобилну апликацију користећи Андроид, учење Јаве ће вам добро послужити. Ево неких основних Јава концепата који ће вам помоћи да почнете. Опширније укључује Јава АПИ за КСМЛ обраду (ЈАКСП), што је кровни термин који покрива већину аспеката КСМЛ обраде. Ови укључују:

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

У овом чланку користимо ДОМ АПИ да покаже како читати и писати КСМЛ датотеке са јава. У будућим чланцима ћемо покрити друга два АПИ-ја.

Пример КСМЛ датотеке

За потребе овог чланка, демонстрирамо концепте користећи следећи пример КСМЛ-а који се може пронаћи овде:

 1.0?>Гамбардела, МетјуКСМЛ водич за програмере
рачунар44.952000-10-01Детаљан поглед на креирање апликација са КСМЛ-ом.Раллс, Ким... 

Читање КСМЛ датотеке

Хајде да погледамо основне кораке потребне за читање КСМЛ датотеке помоћу ДОМ АПИ-ја.

Први корак је да добијете пример ДоцументБуилдер. Градитељ се користи за рашчлањивање КСМЛ докумената. За основну употребу, то радимо овако:

ДоцументБуилдерФацтори фацтори = ДоцументБуилдерФацтори.невИнстанце(); фацтори.сетНамеспацеАваре (фалсе); фацтори.сетВалидатинг (фалсе); ДоцументБуилдер буилдер = фацтори.невДоцументБуилдер(); 

Сада можемо да учитамо цео документ у меморију почевши од КСМЛ основног елемента. У нашем примеру, то је каталог елемент.

Фајл фајл =...; // КСМЛ фајл за читање. Документ документа = буилдер.парсе (фајл); Каталог елемената = доцумент.гетДоцументЕлемент(); 

И то је то, људи! ДОМ АПИ за читање КСМЛ-а је заиста једноставан. Сада имате приступ целом КСМЛ документу почевши од његовог основног елемента, каталог. Хајде сада да видимо како да радимо са њим.

Коришћење ДОМ АПИ-ја

Сада када имамо КСМЛ роот Елемент, можемо користити ДОМ АПИ за издвајање занимљивих грумена информација.

Узми све књига потомци основног елемента и пређите преко њих. Напоменути да гетЦхилдНодес() враћа све деца, укључујући текст, коментаре итд. За нашу сврху, потребни су нам само подређени елементи, тако да прескачемо остале.

НодеЛист боокс = цаталог.гетЦхилдНодес(); фор (инт и = 0, ии = 0, н = боокс.гетЛенгтх(); и < н; и++) { Ноде цхилд = боокс.итем (и); иф ( цхилд.гетНодеТипе() != Чвор. ЕЛЕМЕНТ_НОДЕ ) наставак; Књига елемената = (Елемент) дете; // рад са књигом Елемент овде. }

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

статички приватни чвор финдФирстНамедЕлемент (надређени чвор, стринг тагНаме) { НодеЛист цхилдрен = парент.гетЦхилдНодес(); фор (инт и = 0, ин = цхилдрен.гетЛенгтх(); и < ин; и++) { Ноде цхилд = цхилдрен.итем (и); иф ( цхилд.гетНодеТипе() != Чвор. ЕЛЕМЕНТ_НОДЕ ) наставак; иф ( цхилд.гетНодеНаме().екуалс (тагНаме) ) ретурн дете; } ретурн нулл; }

Имајте на уму да ДОМ АПИ третира текстуални садржај унутар елемента као посебан чвор типа ТЕКСТ_НОДЕ. Поред тога, текстуални садржај може бити подељен на више суседних текстуалних чворова. Дакле, потребна је следећа посебна обрада да би се дохватио садржај текста унутар елемента.

статички приватни стринг гетЦхарацтерДата (родитељ чвора) { СтрингБуилдер тект = нев СтрингБуилдер(); иф ( парент == нулл ) врати текст.тоСтринг(); НодеЛист деца = парент.гетЦхилдНодес(); фор (инт к = 0, кн = цхилдрен.гетЛенгтх(); к < кн; к++) { Ноде цхилд = цхилдрен.итем (к); иф ( цхилд.гетНодеТипе() != Чвор. ТЕКСТ_НОДЕ ) прекид; тект.аппенд (цхилд.гетНодеВалуе()); } ретурн тект.тоСтринг(); }

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

НодеЛист боокс = цаталог.гетЦхилдНодес(); фор (инт и = 0, ии = 0, н = боокс.гетЛенгтх(); и < н; и++) { Ноде цхилд = боокс.итем (и); иф ( цхилд.гетНодеТипе() != Чвор. ЕЛЕМЕНТ_НОДЕ ) наставак; Књига елемената = (Елемент) дете; ии++; Стринг ид = боок.гетАттрибуте("ид"); Стринг аутхор = гетЦхарацтерДата (финдФирстНамедЕлемент (цхилд,"аутхор")); Стринг титле = гетЦхарацтерДата (финдФирстНамедЕлемент (цхилд,"титле")); Стринг жанр = гетЦхарацтерДата (финдФирстНамедЕлемент (цхилд,"генре")); Цена стринга = гетЦхарацтерДата (финдФирстНамедЕлемент (цхилд,"прице")); Стринг пубдате = гетЦхарацтерДата (финдФирстНамедЕлемент (цхилд,"пубдате")); Стринг десцр = гетЦхарацтерДата (финдФирстНамедЕлемент (цхилд,"десцриптион")); Систем.оут.принтф("%3д. ид књиге = %с\н" + " аутор: %с\н" + " наслов: %с\н" + " жанр: %с\н" + " цена: %с\н" + " издање: %с \н" + " десцр: %с\н", ии, ид, аутор, наслов, жанр, цена, издање, десцр); }

Писање КСМЛ излаза

Јава пружа АПИ за КСМЛ трансформацију да трансформише КСМЛ податке. Овај АПИ користимо са трансформација идентитета да генерише излаз.

Као пример, додајмо нови књига елемент у каталогу узорака представљеном изнад. Детаљи књиге (нпр аутор, наслов, итд.) могу се добити екстерно, можда из датотеке својстава или базе података. Користимо следећу датотеку својстава за учитавање података.

ид=бк113. аутор=Џејн Остин. титле=Понос и предрасуде. жанр=Романса. цена=6,99. публисх_дате=2010-04-01. десцриптион="Општепризната је истина да самац који поседује богатство мора да му недостаје жена." Тако почиње Приде и Предрасуде, духовита комедија понашања Џејн Остин – један од најпопуларнијих романа свих времена – која приказује сјајно цивилизовано борба између поносни господин Дарси и Елизабет Бенет са предрасудама док играју своје живахно удварање у низу салона из осамнаестог века интриге. 

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

Фајл фајл =...; // КСМЛ фајл за читање. Документ документа = буилдер.парсе (фајл); Каталог елемената = доцумент.гетДоцументЕлемент(); 

Учитавамо податке из датотеке са својствима користећи Својства класа обезбеђена са јава. Код је прилично једноставан и приказан испод.

Стринг пропсФиле =...; Пропертиес пропс = нев Пропертиес(); три (ФилеРеадер ин = нев ФилеРеадер (пропсФиле)) { пропс.лоад (ин); }

Када се својства учитају, преузимамо вредности које желимо да додамо из датотеке са својствима.

Стринг ид = пропс.гетПроперти("ид"); Стринг аутхор = пропс.гетПроперти("аутор"); Стринг титле = пропс.гетПроперти("титле"); Стринг жанр = пропс.гетПроперти("генре"); Стринг цена = пропс.гетПроперти("прице"); Стринг публисх_дате = пропс.гетПроперти("публисх_дате"); Стринг десцр = пропс.гетПроперти("опис"); 

Хајде сада да направимо празно књига елемент.

Књига елемената = доцумент.цреатеЕлемент("књига"); боок.сетАттрибуте("ид", ид); 

Додавање подређених елемената у књига је тривијалан. Ради практичности, прикупљамо потребна имена елемената у а Листа и додајте вредности у петљу.

Листаелнамес =Арраис.асЛист("аутор", "наслов", "жанр", "цена", "датум_објаве", "опис"); фор (Стринг елнаме: елнамес) { Елемент ел = доцумент.цреатеЕлемент (елнаме); Текст текста = доцумент.цреатеТектНоде (пропс.гетПроперти (елнаме)); ел.аппендЦхилд (текст); боок.аппендЦхилд (ел); } цаталог.аппендЦхилд (књига);

И тако се то ради. Тхе каталог елемент сада има ново књига додат је елемент. Све што сада остаје је да испишете ажурирани КСМЛ.

За писање КСМЛ-а потребна нам је инстанца Трансформер који је креиран као што је приказано у наставку. Имајте на уму да захтевамо увлачење излазног КСМЛ-а користећи сетОутпутПроперти() методом.

ТрансформерФацтори тфацт = ТрансформерФацтори.невИнстанце(); Трансформер тформ = тфацт.невТрансформер(); тформ.сетОутпутПроперти (ОутпутКеис. ИНДЕНТ, "да"); тформ.сетОутпутПроперти("{ http://xml.apache.org/xslt}indent-amount", "3"); 

Последњи корак у генерисању КСМЛ излаза је примена трансформације. Резултат се појављује у излазном току, Систем.оут.

тформ.трансформ (нови ДОМСоурце (документ), нови СтреамРесулт (Систем.оут)); 

Да бисте записали излаз директно у датотеку, користите следеће.

тформ.трансформ (нови ДОМСоурце (документ), нови СтреамРесулт (нова датотека("оутпут.кмл"))); 

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

Да ли сте користили ДОМ АПИ у својим апликацијама? Како је то било? Обавестите нас у коментарима испод.