2013-08-19 7 views
5

sto usando beautifulsoup4 come questo:Come si specifica uno spazio dei nomi per un tag xml con BeautifulSoup4?

from bs4 import BeautifulSoup 
xml_string = u"""<something><dcterms:valid><![CDATA[ 

      start=2012-02-24T00:00:00Z 
      end=2030-12-30T00:00:00Z 
      scheme=W3C-DTF]]> 
     </dcterms:valid></something>""" 
soup = BeautifulSoup(xml_string, 'xml') 
soup.find('dcterms:valid') # returns None 
soup.find('valid') # returns the dcterms:valid node 

C'è un modo per specificare lo spazio dei nomi nella soup.find(tagname) così posso essere preciso su quello che sto cercando di trovare?

risposta

0

Non è necessario specificare "xml" durante l'analisi (Modifica: a meno che non vi sia un cdata come indicato nei commenti).

Ecco il pezzo di esempio di codice che ha lavorato per me

>>> soup = BeautifulSoup(xml_string) 
>>> soup.find('valid') 
>>> soup.find('dcterms:valid') 
<dcterms:valid start="2012-02-24T00:00:00Z" end="2030-12-30T00:00:00Z" scheme="W3C-DTF"></dcterms:valid> 

>>> item = soup.find('dcterms:valid') 
>>> item['start'] 
u'2012-02-24T00:00:00Z' 
+0

Il problema non specificandolo come XML è che il parser HTML non gestisce 'sezioni CDATA' allo stesso modo del parser XML. Purtroppo questo non risponde alla mia domanda. – dar

+0

@dar Non lo sapeva. Grazie per la segnalazione – Kalyan02

Problemi correlati