Leggere file PList su Android

I files .plist sono tipici dello sviluppo iPhone (iOS in generale), questo perchè il parser che legge questo tipo di file XML è già ottimizzato dalla Apple stessa e quindi molto semplice da gestire sulla piattaforma di Cupertino.

Su Android il discorso invece è differente in quanto il formato Plist non è direttamente supportato da un parser DOM che renderebbe facile la gestione di lettura da un web service. Esistono ad oggi diverse librerie open source che possono aiutarci nella lettura di questi particolari file XML. La libreria che ho utilizzato recentemente è disponibile su GitHub all’indirizzo: https://github.com/tenaciousRas/android-plist-parser/wiki/Android-PList-Parser

Esempio di utilizzo


try {
PListXMLParser parser = new PListXMLParser();
PListXMLHandler handler = new PListXMLHandler();
parser.setHandler(handler);
parser.parse(new URL("http://yourdomain.ltd/path/to/plist.xml").openStream());
Array obj = (Array) handler.getPlist().getRootElement();
for (int i=0; i<obj.size(); i++) {
Dict dict = (Dict) obj.get(i);
Map<String, PListObject> list = dict.getConfigMap();
com.longevitysoft.android.xml.plist.domain.String title = (com.longevitysoft.android.xml.plist.domain.String) list.get("title");
Log.i("Title", title.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}

Un segmento di plist sotto test…

<?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">
	<array>
	<dict>
		<key>title</key>
		<string>San Marino</string>
		<key>icon</key>
		<string>http://google.it/logo.png</string>
		<key>type</key>
		<string>content_list</string>
		<key>url</key>
		<string>http://google.it</string>
		<key>searchable</key>
		<integer>0</integer>
	</dict>
... more structures ...