从xml获取标记名称

时间:2017-06-04 00:03:04

标签: python xml beautifulsoup

我有这样的结构文件:

<pwACL>
The gateway only supports upto 10 rules.
</pwACL>

<cmn53>
Batch Number
</cmn53>

我想在标签之间获取标签名称和数据。我尝试使用BeatifulSoup HTMLParser库,但它会自动将标记名称转换为小写。我发现有可能使用html5lib创建树与beatifulsoup树构建器,如下所示:

parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("beatifulsoup"))

但似乎html5lib不再支持beatifulsoup了。还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

BeautisulSoup documentation - Other parsers problems中提及:

  

因为HTML标记和属性不区分大小写,所以三个HTML   解析器将标记和属性名称转换为小写。那就是   标记<TAG></TAG>将转换为<tag></tag>。如果你想   保留混合大小写或大写标签和属性,您需要   将文档解析为XML。

Parsing XML

  

默认情况下,Beautiful Soup将文档解析为HTML。解析一个   将文档作为XML,传入“xml”作为第二个参数   BeautifulSoup构造函数:

soup = BeautifulSoup(markup, "xml")
     

您需要have lxml installed

>>> markup = '''<pwACL>
... The gateway only supports upto 10 rules.
... </pwACL>'''
>>> soup = BeautifulSoup(markup, 'xml')
>>> soup.find_all()
[<pwACL>\nThe gateway only supports upto 10 rules.\n</pwACL>]