<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fabio [mbutubuntu] Buda &#187; Programmazione e Sviluppo</title>
	<atom:link href="http://mbutubuntu.netd.it/?cat=24&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://mbutubuntu.netd.it</link>
	<description>Another blog in the wall</description>
	<lastBuildDate>Sat, 13 Jul 2013 20:19:13 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.2</generator>
		<item>
		<title>Parsing di file XML con Python e lxml</title>
		<link>http://mbutubuntu.netd.it/?p=413</link>
		<comments>http://mbutubuntu.netd.it/?p=413#comments</comments>
		<pubDate>Thu, 03 Nov 2011 11:09:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmazione e Sviluppo]]></category>
		<category><![CDATA[Aggiungi nuovo tag]]></category>
		<category><![CDATA[parsing]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://mbutubuntu.netd.it/?p=413</guid>
		<description><![CDATA[Da quando Ajax, le applicazioni Web ed il cloud computing si sono grandemente diffusi, è sempre più importante scegliere il miglior protocollo di comunicazione tramite il quale rendere semplice e veloce la comunicazione tra Client e Server. Le uniche due specifiche standard per l&#8217;interscambio di dati stutturati tra un Browser e un Server (ospitante API) [...]]]></description>
				<content:encoded><![CDATA[<p>Da quando Ajax, le applicazioni Web ed il <a title="Cloud Computing per il Web" href="http://www.netd.it/soluzioni_applicative">cloud computing</a> si sono grandemente diffusi, è sempre più importante scegliere il miglior protocollo di comunicazione tramite il quale rendere semplice e veloce la comunicazione tra Client e Server.</p>
<p>Le uniche due specifiche standard per l&#8217;interscambio di dati stutturati tra un <a title="Qual è il Browser più veloce?" href="http://blog.netd.it/index.php?p=35">Browser</a> e un Server (ospitante API) sono JSON ed XML. Entrambi i protocolli hanno vantaggi e svantaggi ed entrambi aggiungono overhead alla comunicazione; per JSON però esistono librerie di semplice utilizzo che con poche righe di codice permettono la serializzazione e la de-serializzazione dei dati trasferiti, mentre per XML tutto è leggermente più complicato.</p>
<p>Oggi vedremo in azione Python che grazie ad <a rel="nofollow" href="http://lxml.de">LXML</a> mette a disposizione ottimi strumenti per il parsing di dati strutturati con XML. LXML offre strumenti per XML, HTML ed HTML5 ma anche per CSS.</p>
<p>LXML van<img class="alignleft" style="margin: 1px 4px;" title="LXML pasing benchmark" src="http://blog.ianbicking.org/wp-content/uploads/images/parsing-results.png" alt="" width="360" height="189" />ta ottime prestazioni, sicuramente le migliori su Python, essendo direttamente sviluppato sulle API della potente libreria <a rel="nofollow" href="http://xmlsoft.org/">libxml2</a>. Qui potete trovare dei benchmark dal <a title="Performance of LXML" rel="nofollow" href="http://lxml.de/performance.html#xpath">sito ufficiale di LXML</a> e dal <a rel="nofollow" href="http://blog.ianbicking.org/2008/03/30/python-html-parser-performance/">blog di Ian Bicking</a>, nel blog di Ian emerge che LXML ottiene le migliori prestazioni nel Parsing e nella Serializzazione pur richiedendo una superiore quantità di Ram. LXML è inoltre una libreria solida e stabile. Utilizzo io stesso LXML in produzione su alcuni Server Web per l&#8217;intescambio di dati in <a title="Soluzioni ed Applicazioni Web" href="http://www.netd.it/soluzioni_applicative">applicazioni Web</a> ed <a title="Applicazioni Web in ambiente Cloud" href="http://www.netd.it/soluzioni_applicative">applicazioni cloud</a>.</p>
<p>Eseguire il parsing di dati XML è molto semplice, soprattutto utilizzando Xpath, e permette un buon livello di flessibilità. Per l&#8217;esempio è stato utilizzato un file XML contenente Feed RSS non molto complesso, ma giungiamo subito al codice.</p>
<p><code><br />
#Importiamo la libreria html, xpath è compatibile sia con HTML che XML<br />
#per comodità utilizziamo un Alias (parser)<br />
from lxml.html as parser</code></p>
<p><code>#Apriamo in maniera tradizionale il file XML<br />
f = open("myXML.xml")<br />
file = f.read()</code></p>
<p><code>#Importiamo l'XML in un oggetto lxml<br />
xmlDoc = parser.document_fromstring(file)<br />
for item in xmlDoc.xpath("//item"):</code></p>
<p><code></p>
<div class="indent">#Estraiamo il contenuto testuale del nodo XML<br />
print item.text_content()</p>
<p>#Estraiamo dati dagli attributi del nodo XML<br />
print item.attrib['attribName']</p></div>
<p></code></p>
<p>La riga più interessante è quella che contiene xmlDoc.xpath che vuole come argomento il nome del tag xml/html da estrarre dal documento XML, ovviamente è possibile anche effettuare selezioni di nodi più complesse di quella nell&#8217;esempio ma un parsing tradizionale è sempre il punto di partenza.</p>
]]></content:encoded>
			<wfw:commentRss>http://mbutubuntu.netd.it/?feed=rss2&#038;p=413</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
