XML in een plist file

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 ...



Ga terug   iPhone, iPod touch, iPad en Apple TV forum > Development > Ontwikkelen voor iOS
Wachtwoord vergeten? Registreren!
Registreer FAQ Ledenlijst Kalender Zoeken Berichten van vandaag Markeer forums als gelezen
  #1  
Oud 19 May 2009, 17:19
» Ik heb geen iPhone  
» Windows
 
Geregistreerd: 27 April 2009
Berichten: 40
Standaard 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? ).
Advertentie
Advertentie Gesponsorde links (verdwijnt na registratie)

  #2  
Oud 19 May 2009, 18:39
danielpunt's schermafbeelding
» iPhone 3G 16GB (Wit) [FW: 4.1]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 19 December 2007
Locatie: Vlaardingen
Berichten: 87
Standaard

Dat lijkt mij niet zo heel erg veel werk om zelf te schrijven. Plists zijn namelijk XML's, alleen iets anders opgemaakt
  #3  
Oud 19 May 2009, 21:12
Malork's schermafbeelding
» iPhone 4S 32GB (Wit) [FW: 5.1.1]  [Jailbreak: Nee]
» iPad 3 Wi-Fi + 4G 16GB (Zwart) [FW: 5.1.1]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 31 May 2008
Locatie: Landgraaf
Berichten: 178
Stuur een bericht via MSN naar Malork
Standaard

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('&nbsp;',' ',$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 May 2009 om 21:21.
  #4  
Oud 19 May 2009, 21:23
» iPhone 4 32GB (Zwart) [FW: 4.1]  [Jailbreak: Nee]
» Windows
 
Geregistreerd: 25 September 2008
Berichten: 153
Standaard

Waarom wil je hem in een plist file zetten?
  #5  
Oud 19 May 2009, 22:02
» iPhone 6 64GB (Space Grijs) [FW: 8.0]  [Jailbreak: Nee]
» iPad 4 Wi-Fi 32GB (Zwart) [FW: 8.0]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 12 March 2008
Locatie: Omgeving Nijmegen
Berichten: 94
Standaard

Citaat:
Oorspronkelijk geplaatst door gekkepietje Bekijk bericht
Waarom wil je hem in een plist file zetten?
Een plist kan je als je 'm goed aanmaakt rechtstreeks in een NSDictionary object laden en raadplegen. Dus geen gedoe met XML parsing.
  #6  
Oud 19 May 2009, 23:13
Malork's schermafbeelding
» iPhone 4S 32GB (Wit) [FW: 5.1.1]  [Jailbreak: Nee]
» iPad 3 Wi-Fi + 4G 16GB (Zwart) [FW: 5.1.1]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 31 May 2008
Locatie: Landgraaf
Berichten: 178
Stuur een bericht via MSN naar Malork
Standaard

Citaat:
Oorspronkelijk geplaatst door Myrdhin Bekijk bericht
Een plist kan je als je 'm goed aanmaakt rechtstreeks in een NSDictionary object laden en raadplegen. Dus geen gedoe met XML parsing.
exactemundo
  #7  
Oud 20 May 2009, 00:26
danielpunt's schermafbeelding
» iPhone 3G 16GB (Wit) [FW: 4.1]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 19 December 2007
Locatie: Vlaardingen
Berichten: 87
Standaard

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 May 2009 om 00:29.
  #8  
Oud 20 May 2009, 08:13
» iPhone 6 64GB (Space Grijs) [FW: 8.0]  [Jailbreak: Nee]
» iPad 4 Wi-Fi 32GB (Zwart) [FW: 8.0]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 12 March 2008
Locatie: Omgeving Nijmegen
Berichten: 94
Standaard

Citaat:
Oorspronkelijk geplaatst door danielpunt Bekijk bericht
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.
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  
Oud 20 May 2009, 11:10
danielpunt's schermafbeelding
» iPhone 3G 16GB (Wit) [FW: 4.1]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 19 December 2007
Locatie: Vlaardingen
Berichten: 87
Standaard

Dan kan het handig zijn, maar dat is niet het geval bij het script van Malork
  #10  
Oud 20 May 2009, 12:36
Malork's schermafbeelding
» iPhone 4S 32GB (Wit) [FW: 5.1.1]  [Jailbreak: Nee]
» iPad 3 Wi-Fi + 4G 16GB (Zwart) [FW: 5.1.1]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 31 May 2008
Locatie: Landgraaf
Berichten: 178
Stuur een bericht via MSN naar Malork
Standaard

Citaat:
Oorspronkelijk geplaatst door danielpunt Bekijk bericht
Dan kan het handig zijn, maar dat is niet het geval bij het script van Malork
see the bigger picture . met dat scriptje kun je snel iets omzetten en oplaan als .plist. Dat scriptje aanpassen naar eigen wens is minder werk dan 600 regels XML omschrijven.

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  
Oud 20 May 2009, 17:14
» Ik heb geen iPhone  
» Windows
 
Geregistreerd: 27 April 2009
Berichten: 40
Standaard

Super thanks allemaal people,,

Citaat:
Met dat scriptje kun je snel iets omzetten en oplaan als .plist. Dat scriptje aanpassen naar eigen wens is minder werk dan 600 regels XML omschrijven.
Mijn punt precies
Malork ik denk dat ik zeker een stuk van je code ga overnemen thanks
  #12  
Oud 22 May 2009, 14:51
danielpunt's schermafbeelding
» iPhone 3G 16GB (Wit) [FW: 4.1]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 19 December 2007
Locatie: Vlaardingen
Berichten: 87
Standaard

Citaat:
Oorspronkelijk geplaatst door Malork Bekijk bericht
see the bigger picture . met dat scriptje kun je snel iets omzetten en oplaan als .plist. Dat scriptje aanpassen naar eigen wens is minder werk dan 600 regels XML omschrijven.

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.
Het ligt inderdaad aan waar voor je het gebruikt, maar in veel gevallen prefereer ik toch een XML parsen boven zelf een plist genereren. Eigenlijk heb ik nog het liefst JSON.
  #13  
Oud 26 May 2009, 17:49
» Ik heb geen iPhone  
» Windows
 
Geregistreerd: 27 April 2009
Berichten: 40
Standaard

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.
Bijgevoegde afbeelding(e)
Bestandstype: jpg whathappens2.jpg‎ (14,2 KB, 10x gelezen)
Reageren


Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten)

 
Discussietools
Weergave

Soortgelijke discussies

Discussie Auteur Forum Reacties Laatste bericht
Array met dicts naar een plist schrijven MaximalFX Ontwikkelen voor iOS 0 18 November 2009 09:49
Windows: Een Plist Editor voor windows? midon Desktop-applicaties 8 28 June 2009 16:15
gezocht nl.plist & en.plist Semmm Jailbreak apps en thema's 3 9 April 2009 14:41
Restore file op een Mac Freek Archief 0 18 December 2007 22:27

Regels voor berichten
Je mag geen nieuwe discussies starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit
Trackbacks are Aan
Pingbacks are Aan
Refbacks are Uit



Alle tijden zijn GMT +2. Het is nu 15:48.