2013-08-19 24 views
5

Używam beautifulsoup4 tak:Jak określić przestrzeń nazw dla znacznika XML przy użyciu 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 

Czy istnieje sposób, aby określić obszar nazw w soup.find(tagname) więc mogę być precyzyjne, czego szukam, aby znaleźć?

Odpowiedz

0

Nie trzeba określać "xml" podczas analizowania (edycja: chyba, że ​​w komentarzach jest cdata).

Oto przykładowy kawałek kodu, który pracował dla mnie

>>> 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

problem z nie określając go jako XML, że parser HTML nie obsługuje 'sekcje CDATA' samo jak parsera XML. Niestety to nie odpowiada na moje pytanie. – dar

+0

@dar Nie zdawałem sobie z tego sprawy. Dzięki za wskazanie – Kalyan02

Powiązane problemy