BeautifulSoup:以XML查询名称空间

时间:2018-12-19 17:16:42

标签: python xml parsing beautifulsoup namespaces

我有一个具有自定义命名空间的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>

在Python的BeautifulSoup中是否可以查询本文档中所有attr_a属性的值?

我可以用原始的字符串操作遍历树或以非常乏味的方式遍历父级的子级,但是可以更直接地查询soup.find_all('*.attr_a')或类似的吗?任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

哈哈,显然可以为该任务使用正则表达式。来自docs

  

如果传入正则表达式对象,则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)