Chcę wykonać iterfind()
dla elementów, które mają przestrzeń nazw, ale bez prefiksu. Chciałbym zadzwonićPython lxml iterfind w/namespace, ale prefiks = brak
iterfind([tagname])
lub iterfind([tagname], [namespace dict])
Nie dbam, aby wprowadzić znacznik w następujący sposób za każdym razem:
"{%s}tagname" % tree.nsmap[None]
Szczegóły
jestem uruchomienie odpowiedzi XML z interfejsu API Google. Węzeł główny definiuje kilka przestrzeni nazw, w tym jeden, dla którego nie ma prefiksu: xmlns="http://www.w3.org/2005/Atom"
Wygląda na to, że gdy próbuję przeszukać moją regułę, wszystko zachowuje się tak, jak oczekiwałbym w przypadku elementów z prefiksem. np .:
>>> for x in root.iterfind('dxp:segment'): print x
...
<Element {http://schemas.google.com/analytics/2009}segment at 0x1211b98>
<Element {http://schemas.google.com/analytics/2009}segment at 0x1211d78>
<Element {http://schemas.google.com/analytics/2009}segment at 0x1211a08>
>>>
Ale gdy próbuję szukać czegoś bez przedrostka, wyszukiwanie nie automatycznie dodać nazw dla root.nsmap[None]
. np .:
>>> for x in root.iterfind('entry'): print x
...
>>>
Nawet jeśli próbuję rzucić mapę namespace się jako opcjonalny argument dla iterfind
, nie będzie dołączyć nazw.
Dzięki, ale problemem nie jest to, że nie wiem, jak zdobyć elementy pasujące do tagu. Problem polega na tym, że chciałbym po prostu wpisać znacznik bez przestrzeni nazw i po prostu dostarczyć tabelę przestrzeni nazw, tak aby magia wydarzyła się w tle (tak jak by to było, gdyby był zaangażowany prefiks). – JellicleCat
@JellicleCat: zaktualizowałem moją odpowiedź, mam nadzieję, że to pomaga. – Steven