XML in een plist file discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Beste mensen , Ik heb een xmlbestand van ongeveer 600 regels gekregen en ik zou deze als het mogelijk is graag in een plist file ...
|
Registreer | FAQ | Ledenlijst | Kalender | Berichten van vandaag | Zoeken |
#1
|
|||
|
|||
XML in een plist file
Beste mensen ,
Ik heb een xmlbestand van ongeveer 600 regels gekregen en ik zou deze als het mogelijk is graag in een plist file willen zetten. Weet iemand of er een converter of iets dergelijks bestaat die dit voor mij kan genereren, anders ben ik bang dat ik alles moet gaan overschrijven van mijn originele xml naar de property list ( er is dus wel een converter van plist naar xml beschikbaar die heb ik ook , alleen andersom dus niet? ). |
|
|
Gesponsorde links (verdwijnt na registratie)
|
#2
|
||||
|
||||
Dat lijkt mij niet zo heel erg veel werk om zelf te schrijven. Plists zijn namelijk XML's, alleen iets anders opgemaakt
|
#3
|
||||
|
||||
Ik weet niet hoe groot je kennis van PHP is, maar ik heb zoiets in PHP gemaakt mbv simpleXML. deze leest de realm-status van World of Warcraft als XML-feed, en zette deze om in een plist. Ik was al vergevorderd met zo'n soort App, maar sinds kort heeft Blizzard nagenoeg alle WoW-Apps van de App-store weggehaald dmv een 'Cease & desist' dus mijn App zal er nooit komen .
de hele code die ik (snel) in elkaar heb gezet toendertijd is hieronder; wees vrij om hem te gebruiken. Hij kan sneller / makkelijker, maar ik moest toen ook even snel iets hebben. Code:
<?php $blizzardXML = "http://www.wow-europe.com/realmstatus/index.xml"; $getStatus = new getRealmStatus($blizzardXML); if($getStatus->error) { // kort-door-de-bocht melding, misschien ooit nog eens uitwerken echo "er was een fout tijdens het ophalen van de rss-feed. server offline?"; } else { header('content-Type: text/xml; charset=ISO-8859-1'); echo $getStatus->plist; } class getRealmStatus { private $xmlFile = ""; private $xml = array(); private $languages = array(); private $realms = array(); public $plist = ''; public $error = 0; private $languageArr = array(); public function __construct($xmlFileOrURL) { $this->xmlFile = $xmlFileOrURL; $this->languageArr['en'] = "English Speaking realms"; $this->languageArr['de'] = "German Speaking realms"; $this->languageArr['fr'] = "French Speaking realms"; $this->languageArr['es'] = "Spanish Speaking realms"; $this->languageArr['ru'] = "Russian Speaking realms"; $this->retrieveXML(); } private function retrieveXML() { $test = file_get_contents($this->xmlFile); $test = str_replace(' ',' ',$test); $this->xml = simplexml_load_string($test); if($this->xml) { /* connection / parsing succesful; continue */ $this->createPlist(); } else { /* error connecting! */ $this->error = 1; return; } } private function createPlist() { $this->getRealms(); } private function getAlertMessage() { /* TO BE IMPLEMENTED! FIRST ITEM IN XML IS ALERT MESSAGE */ } /* count the number of items and retrieve the language for the realm, store it as a key */ private function getRealms() { $itemCount = count($this->xml->channel->item)-1; for($i=1;$i<$itemCount;$i++) { // skip $i=0 because that's the alert-item for the realm status */ $realmItem = $this->xml->channel->item[$i]; $realm = array(); $realm['name'] = (string)$realmItem->title; $realm['status'] = ''; $realm['language'] = ''; $realm['type'] = ''; $realm['population'] = ''; $realm['queue'] = ''; $realmPopulation = ''; /* walk through attributes of 'category' to get the right information */ for($x=0;$x<count($realmItem->category);$x++) { // echo $realmItem->category[$x]['domain']."<br />"; $domain = (string)strtolower($realmItem->category[$x]['domain']); $value = (string)$realmItem->category[$x]; $realm[$domain] = $value;// $realmItem->category; } $this->languages[$realm['language']][] = $realm; } $this->buildPlist(); } /* build the .plist for the app to be read properly */ private function buildPlist() { $data = <<<XML <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> XML; $keyCount = 1; foreach($this->languages as $key => $value) { $data .= "<key>".$this->languageArr[$key]."</key>\r\n"; $data .= "<array>\r\n"; foreach($value as $realm) { $data .= "<dict>\r\n"; foreach($realm as $realmKey => $realmString) { $data .= "<key>".$realmKey."</key>\r\n"; $data .= "<string>".$realmString."</string>\r\n"; } $data .= "</dict>\r\n"; } $data .= "</array>\r\n"; } $data .= "</dict>\r\n"; $data .= "</plist>\r\n"; $this->plist = $data; } } ?> Laatst gewijzigd door Malork; 19-05-09 om 22:21. |
#4
|
|||
|
|||
Waarom wil je hem in een plist file zetten?
|
#5
|
|||
|
|||
|
#6
|
||||
|
||||
|
#7
|
||||
|
||||
Zo heel erg veel gedoe is het ook weer niet. En de NSXMLParser is echt niet zo heel erg moeilijk, en best wel snel Zo hoeft de data niet eerst door jouw server opgehaald, dan geparsed worden en daarna aan de iPhone doorgeven.
Hier heb je een voorbeeld: codesofa Make NSXMLParser your friend.. Overigens, als ik een XML naar plist converter zou schrijven zou ik het wel iets abstracter aanpakken, zodat je het eventueel later nog kan gebruiken of delen met anderen Laatst gewijzigd door danielpunt; 20-05-09 om 01:29. |
#8
|
|||
|
|||
Zoveel gedoe is het ook niet, maar als je toch zelf de data samenstelt kan je het natuurlijk net zo goed in een voor de iPhone direct leesbaar formaat doen.
|
#9
|
||||
|
||||
Dan kan het handig zijn, maar dat is niet het geval bij het script van Malork
|
#10
|
||||
|
||||
Citaat:
Ik had dat scriptje toendertijd ook gemaakt om niet de gehele RSS-feed binnen te halen met info die ik niet gebruik, dit om overhead op de gebruiker's iPhone te voorkomen. |
#11
|
|||
|
|||
Super thanks allemaal people,,
Citaat:
Malork ik denk dat ik zeker een stuk van je code ga overnemen thanks |
#12
|
||||
|
||||
Citaat:
|
#13
|
|||
|
|||
Ik heb voor een andere aanpak gekozen, gezien de eerste niet mocht van mijn stagebegeleider.
Ik zat te denken aan xpath en xquery. Wat ik wil is het volgende , ik ben benieuwd of het mogelijk is maar het lijkt me eigenlijk van wel. Ik ben behoorlijk nieuw met Cocoa en Objective C so bear with me . Ik wil dus graag met behulp van xpath of xquery alle waarden die ik nodig heb in een verschillende arrays opslaan ( het zijn allemaal strings) en deze weer gebruiken in mijn tableview. vb. xml bestand ( klein stuk uit xml , zo zit het in elkaar , heb zelf niet gemaakt en kan /mag deze ook niet aanpassen ) <oefening> <exercise id="CW002" type="1" name="Lunge" met="2.0"> <menu_mob> <menuitem id="1" text="training" pic="workout"/> <menuitem id="2" text="site online" pic="online"/> <menuitem id="3" text="Instellingen" pic="settings"/> </menu_mob> <workout_iphone name="middag workout" location="home" equipment="none" level="Beginner" time="7" id="MHXB7"> <exerciseref id="CW002"/> </workout_iphone> </oefening> ik dacht er dus aan met behulp van dus xpath/xquery mijn strings uit de xml te halen op te slaan in arrays (dus bv. van menu_mob in een aparte array zodat dit voor het eerste scherm is , en van workout_iphone in een andere.) En deze dan bij viewDidLoad initWithObjects in te laden. vb. -(void)viewDidLoad { NSArray *array =[[NSarray alloc] initWithObjects:@"ochtend",@"middag"; <-- strings uit array komen self.list = array; etc etc. } Mijn vraag aan jullie is dit mogelijk if so hoe realiseer ik dit het beste , en als niet teveel gevraagd is een stukje sample code of referentie ernaar would be excellent , ik voel me namelijk nog lange niet thuis in objective c. Mocht het niet duidelijk zijn stuur me een pm of reageer hier dan maak ik uitgebreidere schema's mochten jullie willen helpen. ohja heb even een klein schema eronder zodat men ongeveer begrijpt wat er moet gebeuren. |
Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten) |
|
Soortgelijke discussies |
||||
Discussie | Auteur | Forum | Reacties | Laatste bericht |
Array met dicts naar een plist schrijven | MaximalFX | Ontwikkelen voor iOS | 0 | 18-11-09 10:49 |
Windows: Een Plist Editor voor windows? | midon | Desktop-applicaties | 8 | 28-06-09 17:15 |
gezocht nl.plist & en.plist | Semmm | Jailbreak apps en thema's | 3 | 09-04-09 15:41 |
Restore file op een Mac | Freek | Archief | 0 | 18-12-07 23:27 |
|
|