Parser un XMLAfin de parser un XML dans XBMC vous aurez le choix entre plusieurs module tels que:
- ElementTree: Tres rapide a parser mais aussi tres sensible aux erreurs dans un XML
- BeautifulSoup: Moins rapide qu'ET mais supporte des XML 'moins standards'
- minidom: un grand classique, plus d'info sur le site officiel ICI, voici un snippet LA
- lxml: a ses fans aussi, plus d'infos ICI
- Et certainement d'autres ...
Je n'ai pour ma part eu l'occasion que de comparer ElementTree et BeautifulSoup
Voici donc deux exemple de code parsant le meme XML, l'un avec ElementTree, l'autre avec Beautifulsoup
Exemple avec BeautifulSoup (Python):
from BeautifulSoup import BeautifulStoneSoup
soup = BeautifulStoneSoup((open(os.path.join(CACHEDIR, XMLFile), 'r')).read())
cat_scrapers = soup.find("scrapers")
if cat_scrapers != None:
for item in cat_scrapers.findAll("entry"):
if hasattr(item.title,'string'):
if item.title.string != None:
title = item.title.string.encode("cp1252")
if hasattr(item.version,'string'):
if item.version.string != None:
version = item.version.string.encode("utf-8")
if hasattr(item.lang,'string'):
if item.lang.string != None:
language = item.lang.string.encode("utf-8")
if hasattr(item.date,'string'):
if item.date.string != None:
date = item.date.string.encode("cp1252")
if hasattr(item.previewvideourl,'string'):
if item.previewvideourl.string != None:
previewVideoURL = item.previewvideourl.string.encode("utf-8")
Exemple avec ElementTree(Python):
import elementtree.ElementTree as ET
elems = ET.parse( open( os.path.join( CACHEDIR, XMLFile ), "r" ) ).getroot()
cat_scrapers = elems.find( "scrapers" ).findall( "entry" )
for item in cat_scrapers:
title = item.findtext( "title" )
version = item.findtext( "version" )
language = item.findtext( "lang" )
date = item.findtext( "date" )
added = item.findtext( "added" )
previewVideoURL = item.findtext( "previewVideoURL" )
Dans les deux bien sur cas vous devrez couvrir en plus les exceptions en utilisant des blocs try/except