Как я могу получить доступ к namespaced XML использование элементов BeautifulSoup?

У меня есть XML-документ, который читает как это:

<xml>
<web:Web>
<web:Total>4000</web:Total>
<web:Offset>0</web:Offset>
</web:Web>
</xml>

мой вопрос состоит в том, как я получаю доступ к ним пользующийся библиотекой как BeautifulSoup в Python?

xmlDom.web ["сеть"].Total? не работает?

8
задан bstpierre 28 September 2012 в 01:35
поделиться

1 ответ

BeautifulSoup не является библиотекой DOM как таковой (она не реализует API-интерфейсы DOM). Чтобы усложнить ситуацию, вы используете пространства имен в этом фрагменте xml. Чтобы проанализировать этот конкретный фрагмент XML, вы должны использовать BeautifulSoup следующим образом:

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

Если бы вы не использовали пространства имен, код мог бы выглядеть следующим образом:

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

Ключевым моментом здесь является то, что BeautifulSoup не знает (или не заботится ) ничего о пространствах имен. Таким образом, web: Web рассматривается как тег web: web , а не как тег Web , принадлежащий пространству имен web . Хотя BeautifulSoup добавляет web: web в словарь элементов xml, синтаксис Python не распознает web: web как единственный идентификатор.

Вы можете узнать об этом больше, прочитав документацию .

10
ответ дан 5 December 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: