Како извести КСМЛ датотеке у Ксцоде

Једноставан задатак који је окосница многим апликацијама је могућност раздвајања КСМЛ датотека. И, срећом, Ксцоде чини релативно лако анализирати КСМЛ датотеку у Објецтиве-Ц.

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

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

У овом примеру ћемо приказати датотеку са Интернета тако што ћемо му пренети одређену веб адресу ( УРЛ ).

Почећемо са израдом датотеке заглавља. Ово је пример веома основне датотеке заглавља за Детаил Виев Цонтроллер са минималним захтевима за разраду нашег фајла:

@интерфаце РоотВиевЦонтроллер: УИТаблеВиевЦонтроллер {
ДетаилВиевЦонтроллер * детаилВиевЦонтроллер;

НСКСМЛПарсер * рссПарсер;
НСМутаблеАрраи * чланке;
НСМутаблеДицтионари * итем;
НССтринг * цуррентЕлемент;
НСМутаблеСтринг * ЕлементВалуе;
БООЛ еррорПарсинг;
}

@проперти (нонатомиц, ретаин) ИБОутлет ДетаилВиевЦонтроллер * детаилВиевЦонтроллер;

- (воид) парсеКСМЛФилеАтУРЛ: (НССтринг *) УРЛ;

Функција парсеКСМЛФилеАтУРЛ ће започети процес за нас. Када заврши, НСМутаблеАрраи "чланци" ће задржати наше податке. Низ ће бити састављен од променљивих речника са кључевима везаним за имена поља у КСМЛ датотеци.

Сада када смо поставили потребне варијабле, прелазимо на састанак процеса у .м датотеку:

- (воид) парсерДидСтартДоцумент: (НСКСМЛПарсер *) парсер {
НСЛог (@ "Пронађени фајл и активирање парсинга");

}

Ова функција ради на почетку процеса. Нема потребе ништа ставити у ову функцију, али ако желите да извршите задатак када датотека почне да се разрађује, овде ћете ставити свој код.

- (воид) парсеКСМЛФилеАтУРЛ: (НССтринг *) УРЛ адреса
{

НССтринг * агентСтринг = "Мозилла / 5.0 (Мацинтосх; У; Интел Мац ОС Кс 10_5_6; ен-ус) АпплеВебКит / 533.5 (.
НСМутаблеУРЛРекуест * рекуест = [НСМутаблеУРЛРекуест рекуестВитхУРЛ:
[НСУРЛ УРЛВитхСтринг: УРЛ]];
[рекуест сетВалуе: агентСтринг форХТТПХеадерФиелд: @ "Кориснички агент"];
кмлФиле = [НСУРЛЦоннецтион сендСинцхроноусРекуест: захтев за враћањеРеспонсе: нил грешка: нил];


чланци = [[НСМутаблеАрраи аллоц] инит];
еррорПарсинг = НЕ;

рссПарсер = [[НСКСМЛПарсер аллоц] инитВитхДата: кмлФиле];
[рссПарсер сетДелегате: селф];

// Можда ћете морати да укључите неке од њих у зависности од типа КСМЛ датотеке коју анализирате
[рссПарсер сетСхоулдПроцессНамеспацес: НЕ];
[рссПарсер сетСхоулдРепортНамеспацеПрефикес: НЕ];
[рссПарсер сетСхоулдРесолвеЕктерналЕнтитиес: НЕ];

[рссПарсер парсе];

}

Ова функција инструише мотор да преузме датотеку на одређеној веб адреси (УРЛ) и започне процес за његову анализу.

Говоримо удаљеном серверу да смо Сафари на Мац-у само у случају да сервер покушава да преусмери иПхоне / иПад на мобилну верзију.

Опције на крају су специфичне за одређене КСМЛ датотеке. Већина РСС датотека и генеричких КСМЛ датотека не морају да буду укључени.

- (воид) парсер: (НСКСМЛПарсер *) парсер парсеЕррорОццурред: (НСЕррор *) парсеЕррор {

НССтринг * еррорСтринг = [НССтринг стрингВитхФормат: @ "Код грешке% и", [парсеЕррор цоде]];
НСЛог (@ "Грешка при разграничавању КСМЛ-а:% @", еррорСтринг);


еррорПарсинг = ИЕС;
}

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

- (воид) парсер: (НСКСМЛПарсер *) парсер дидСтартЕлемент: (НССтринг *) елементНаме намеспацеУРИ: (НССтринг *) намеспацеУРИ квалификованиНаме: (НССтринг *) кНаме атрибути: (НСДицтионари *) аттрибутеДицт {
цуррентЕлемент = [елементНаме цопи];
ЕлементВалуе = [[НСМутаблеСтринг распоред] инит];
ако ([елементНаме јеЕкуалТоСтринг: @ "итем"]) {
итем = [[НСМутаблеДицтионари аллоц] инит];

}

}

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

За овај примјер, разрадићемо датотеку сличну са РСС датотекама које раздвајају елементе у групе под насловом "ставке" унутар КСМЛ датотеке. На почетку обраде, проверавамо име елемента "ставка" и додељујемо наш речник реченица када се открије нова група. Иначе, иницијализирамо нашу варијаблу за вриједност.

- (воид) парсер: (НСКСМЛПарсер *) парсер фоундЦхарацтерс: (НССтринг *) стринг {
[ЕлементВалуе аппендСтринг: стринг];
}

Ово је једноставан део. Када нађемо ликове, једноставно их додамо у нашу варијаблу "ЕлементВалуе".

- (воид) парсер: (НСКСМЛПарсер *) парсер дидЕндЕлемент: (НССтринг *) елементНаме намеспацеУРИ: (НССтринг *) намеспацеУРИ куалифиедНаме: (НССтринг *) кНаме {
ако ([елементНаме јеЕкуалТоСтринг: @ "итем"]) {
[чл. аддОбјецт: [ставка]];
} елсе {
[итем сетОбјецт: ЕлементВалуе форКеи: елементНаме];
}

}

Када завршимо са обрадом елемента, морамо учинити једну од две ствари: (1) ако је крајњи елемент "ставка", завршили смо нашу групу, тако да ћемо додати наш рјечник у наш низ "чланака ".

Или (2) ако елемент није "ставка", поставићемо вриједност у нашем рјечнику с кључем који одговара имену елемента. (Ово значи да нам не треба индивидуална варијабла за свако поље унутар КСМЛ датотеке. Можемо их процесирати мало динамичније.)

- (воид) парсерДидЕндДоцумент: (НСКСМЛПарсер *) парсер {

ако (еррорПарсинг == НЕ)
{
НСЛог (@ "КСМЛ обрада обављена!");
} елсе {
НСЛог (@ "Грешка у току КСМЛ обраде");
}

}

Ово је задња функција потребна за нашу рутину. Једноставно завршава документ. Поставићете било који код који желите завршити овде овде, или нешто посебно које бисте можда желели урадити у случају грешке.

Једна ствар коју би многе апликације можда желеле да уради овде је да сачувате податке и / или КСМЛ датотеку у датотеку на уређају. На тај начин, ако корисник не буде повезан на Интернет, следећи пут када учитавају апликацију, они и даље могу добити ове информације.

Наравно, не можемо заборавити најважнији део: прича вашој апликацији да разбије фајл (и дајући му веб адресу да га пронађе!).

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

[селф парсеКСМЛФилеАтУРЛ: @ "хттп://ввв.вебаддресс.цом/филе.кмл"];