BeautifulSoup non è una libreria DOM di per sé (non implementa le API DOM). Per rendere le cose più complicate, stai usando gli spazi dei nomi in quel frammento xml. Per analizzare quel pezzo specifico di XML, utilizza BeautifulSoup come segue:
from BeautifulSoup import BeautifulSoup
xml = """<xml>
<web:Web>
<web:Total>4000</web:Total>
<web:Offset>0</web:Offset>
</web:Web>
</xml>"""
doc = BeautifulSoup(xml)
print doc.find('web:total').string
print doc.find('web:offset').string
Se non stava utilizzando namespace, il codice potrebbe essere la seguente:
from BeautifulSoup import BeautifulSoup
xml = """<xml>
<Web>
<Total>4000</Total>
<Offset>0</Offset>
</Web>
</xml>"""
doc = BeautifulSoup(xml)
print doc.xml.web.total.string
print doc.xml.web.offset.string
La chiave qui è che BeautifulSoup non sa (o cura) nulla di namespace. Pertanto, web:Web
viene considerato come un tag web:web
anziché come tag Web
appartenente allo spazio dei nomi web
. Mentre BeautifulSoup aggiunge web:web
al dizionario degli elementi xml, la sintassi python non riconosce web:web
come un unico identificatore.
Per ulteriori informazioni, consultare lo documentation.
fonte
2010-06-17 05:06:23
grazie! funziona perfettamente ora. Mi sto sempre confondendo su cosa dare a find() ..e queste definizioni di namespace e il modo in cui sono scritte mi confonde molto ... qualsiasi link per cancellare tutto ciò sarebbe apprezzato! – demos
Solo il link alla documentazione ti ho già dato ... e molti esperimenti. –
'AttributeError: L'oggetto 'NoneType' non ha attributo 'stringa'' –