XML-tiedostojen jäsentäminen Xcodessa

click fraud protection

Vaikka sisäänrakennettu XML jäsennin lisää todellista arvoa uudelle työpöydälle tai mobiilisovellukselle. Tämän toiminnon koodaus vaatii yleensä paljon kehitysaikaa ja beetatestausta. Applen Xcode-ohjelma sisältää XML-jäsentimen, joka ohittaa suurimman osan tästä manuaalisesta työstä.

An XML tiedosto voi sisältää mitä tahansa sovelluksesi perustiedoista RSS-syöte verkkosivustolle. Ne voivat myös olla erinomainen tapa päivittää tietoja sovelluksessasi etäyhteyden kautta, mikä ohittaa tarpeen lähettää uusi binaari Applelle yksinkertaisesti lisätäksesi uuden kohteen luetteloon.

Xcode-prosessi

Sisäänrakennettu Xcode-prosessi sisältää vaiheet käytettävien muuttujien alustamiseksi, XML-jäsenninprosessin aloittamiseksi, prosessin syöttämiseksi tiedostoksi, yksittäisten elementtien ja niissä olevien merkkien (arvon) arviointi, yksittäisen elementin loppu tunnistaminen ja jäsentämisen lopettaminen prosessi.

Käytä XML-jäsennintä

Jäsenyyden havainnollistamiseksi jäsennämme esimerkkitiedoston Internetistä välittämällä sille tietyn verkko-osoitteen (URL).

instagram viewer

Aloita otsikkotiedoston rakentamisesta. Tämä on esimerkki Detail View Controllerin hyvin perustyyppisestä otsikkotiedostosta, joka sisältää tiedostomme jäsentämisen vähimmäisvaatimukset:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;
NSXMLParser * rssParser;
NSMutableArray * -artikkelit;
NSMutableDictionary * -kohde;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL-virheParsing;
}
@ominaisuus (ei-atominen, säilytä) IBOutlet DetailViewController * detailViewController;
- (void) parseXMLFileAtURL: (NSString *) URL;


ParseXMLFileAtURL-toiminto käynnistää prosessin. Kun se on valmis, NSMutableArray "artikkelit" pitävät tietoja. Matriisi koostuu muutettavista sanakirjoista, joissa on avaimet, jotka liittyvät XML-tiedoston kenttien nimiin.

Alusta sitten prosessi:

- (void) parserDidStartDocument: (NSXMLParser *) jäsennin {
NSLog (@ "Tiedosto löydetty ja jäsentäminen aloitettu");
}

Tämä toiminto toimii prosessin alussa. Tähän toimintoon ei tarvitse asettaa mitään, mutta jos haluat suorittaa tehtävän, kun tiedostoa aletaan jäsentää, sinne laittaisit koodisi.

Kehota ohjelmaa lataamaan jotain

Kehota seuraavaksi ohjelmaa lataamaan jotain:

- (void) parseXMLFileAtURL: (NSString *) URL
{
NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; fi-fi) AppleWebKit / 525.27.1 (KHTML, kuten Gecko) Versio / 3.2.1 Safari / 525.27.1 ";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: pyyntö returningResponse: nolla virhe: nolla];
artikkelit = [[NSMutableArray allokointi] init];
errorParsing = EI;
rssParser = [[NSXMLParser-varaus] initWithData: xmlFile];
[rssParser setDelegate: itse];
// Joudut ehkä kääntämään osan näistä riippuen jäsentämästäsi XML-tiedostotyypistä
[rssParser setShouldProcessNamespaces: EI];
[rssParser setShouldReportNamespacePrefixes: EI];
[rssParser setShouldResolveExternalEntities: EI];
[rssParser jäsentää];
}


Tämä toiminto kehottaa moottoria lataamaan tiedoston tietylle verkko-osoitteelle (URL) ja aloittamaan sen jäsentämisen. Kerromme etäpalvelimelle, että olemme Safari, joka toimii Macissa vain siinä tapauksessa, että palvelin yrittää ohjata iPhonea / iPadia mobiiliversioon.

Lopussa olevat vaihtoehdot koskevat tiettyjä XML-tiedostoja. Useimmat RSS-tiedostot ja yleiset XML-tiedostot eivät tarvitse niitä päälle.

Tarkista virhe virhe

Suorita tuloksen perusvian tarkistus:

- (void) jäsennin: (NSXMLParser *) jäsennin parseErrorOccurrent: (NSError *) parseError {
NSString * errorString = [NSString stringWithFormat: @ "Virhekoodi% i", [parseError-koodi]];
NSLog (@ "Virhe jäsennettäessä XML:% @", errorString);
errorParsing = KYLLÄ;
} Tämä virheen tarkistusreititys asettaa binääriarvon, jos se havaitsee virheen. Saatat tarvita jotain tarkempaa täällä riippuen siitä, mitä olet tekemässä. Jos joudut yksinkertaisesti suorittamaan koodin käsittelyn jälkeen virheen sattuessa,


Tämä virhetarkistusrutiini asettaa binääriarvon, jos se havaitsee virheen. Saatat tarvita jotain tarkempaa täällä riippuen siitä, mitä olet tekemässä. Jos joudut yksinkertaisesti suorittamaan koodin käsittelyn jälkeen virhetilanteessa, binäärimuuttujan jäsentämisvirhe voidaan kutsua tuolloin.

Analysoi haettu sisältö

Seuraavaksi ohjelma hajottaa haetun sisällön ja analysoi sen:

- (void) jäsennin: (NSXMLParser *) jäsennin didStartElement: (NSString *) elementName nimitilaURI: (NSString *) nimitilaURI qualifiedName: (NSString *) qName määritteet: (NSDictionary *) attributeDict {
currentElement = [elementNimi-kopio];
ElementValue = [[NSMutableString allokointi] init];
if ([elementNimi onEqualToString: @ "item"]) {
item = [[NSMutableDictionary allokointi] init];
}
}


XML-jäsentimen liha sisältää kolme toimintoa, yhden, joka suoritetaan yksilön alussa elementti, joka kulkee elementin jäsentämisen keskellä ja joka suoritetaan elementin lopussa elementti.

Tässä esimerkissä jäsennetään RSS-tiedostoja muistuttava tiedosto, joka jakaa elementit ryhmiin otsikon alla kohteita XML-tiedostossa. Käsittelyn alussa tarkistamme elementin nimen "item" ja varaamme nimikekirjastomme, kun uusi ryhmä havaitaan. Muuten alustamme muuttujamme arvolle:

- (void) jäsennin: (NSXMLParser *) jäsennin löytyi Merkit: (NSString *) merkkijono {
[ElementValue appendString: merkkijono];
}


Kun löydämme merkkejä, lisätään ne yksinkertaisesti muuttujaamme ElementValue:

- (void) jäsennin: (NSXMLParser *) jäsennin didEndElement: (NSString *) elementName nimitilaURI: (NSString *) nimitilaURI qualifiedName: (NSString *) qName {
if ([elementNimi onEqualToString: @ "item"]) {
[artikkelit addObject: [tuotekopio]];
} muu {
[item setObject: ElementValue forKey: elementNAME];
}
}

Mitä tapahtuu, kun jäsentäminen on valmis

Kun ohjelma viimeistelee elementin, sen on tehtävä yksi kahdesta asiasta:

  • Jos loppuelementti on kohde, olemme lopettaneet ryhmämme, joten lisäämme sanakirjan artikkeleihimme.
  • Jos elementti ei ole kohde, asetamme arvon sanastossamme avaimella, joka vastaa elementin nimeä. (Tämä tarkoittaa, että emme tarvitse erillistä muuttujaa kutakin XML-tiedoston kenttää varten. Voimme käsitellä niitä hieman dynaamisemmin.)

Tämä on viimeinen jäsentämisrutiiniimme tarvittava toiminto; se lopettaa asiakirjan. Laita lopullinen koodi tähän tai määritä virheitä korjaava aliohjelma:

- (void) parserDidEndDocument: (NSXMLParser *) jäsennin {
jos (errorParsing == EI)
{
NSLog (@ "XML-käsittely valmis!");
} muu {
NSLog (@ "Virhe tapahtui XML-käsittelyn aikana");
}
}

Tallenna tiedot

Yksi asia, jonka monet sovellukset haluavat tehdä tässä, on tallentaa tiedot tai XML-tiedosto laitteen tiedostoon. Tällä tavoin, jos laite ei ole yhteydessä Internetiin seuraavan kerran, kun sovellus latautuu, se voi silti saada nämä tiedot.

Emme tietenkään voi unohtaa tärkeintä osaa: käskemällä sovellustasi jäsentämään tiedosto (ja antamalla sille verkko-osoite löytääksesi sen!). Aloita prosessi lisäämällä tämä koodirivi oikeaan paikkaan, jossa haluat tehdä XML-käsittelyn:

 [itse parseXMLFileAtURL: @ " http://www.webaddress.com/file.xml"]; 
instagram story viewer