BeautifulSoup: запрос пространства имен в XML - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть документ XML с настраиваемым пространством имен:

<parent>
 <c1:doc>
   <c1:attr_a></c1:attr_a>
   <c1:attr_b></c1:attr_b>
 </c1:doc>
 <c2:doc>
   <c2:attr_a></c2:attr_a>
   <c2:attr_b></c2:attr_b>
  </c2:doc>
</parent>

Возможно ли в BeautifulSoup Python запросить значения всех атрибутов attr_a в этом документе?

Я могуОбходите дерево с помощью необработанных строковых операций или очень нудно обходите потомков родителя, но можно ли запросить soup.find_all('*.attr_a') или подобное более прямо?Любые предложения будут с благодарностью.

1 Ответ

0 голосов
/ 19 декабря 2018

Ага, очевидно, можно использовать регулярные выражения для этой задачи.Из документов :

Если вы передадите объект регулярного выражения, Beautiful Soup выполнит фильтрацию по этому регулярному выражению, используя метод search ().Этот код находит все теги, имена которых начинаются с буквы «b»;в этом случае тег и тег:

html_doc = """
<parent>
 <c1:doc>
   <c1:attr_a></c1:attr_a>
   <c1:attr_b></c1:attr_b>
 </c1:doc>
 <c2:doc>
   <c2:attr_a></c2:attr_a>
   <c2:attr_b></c2:attr_b>
  </c2:doc>
</parent>
"""

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')

import re
for tag in soup.find_all(re.compile(".attr_a")):
    print(tag.name)
...