首页 > 解决方案 > 用 BeautifulSoup 显示 XML 树结构

问题描述

在使用新的 XML 结构时,首先了解全局总是很有帮助的。

加载时BeautifulSoup

import requests, bs4
s = requests.get('https://www.w3schools.com/xml/cd_catalog.xml').text
x = bs4.BeautifulSoup(s, 'xml')
print(x)

有没有一种内置的方式来显示不同深度的树结构?


https://www.w3schools.com/xml/cd_catalog.xml的示例,带有maxdepth=0,它将是:

CATALOG

maxdepth=1它将是:

CATALOG
  CD 
  CD
  CD
  ...

maxdepth=2,它将是:

CATALOG
  CD 
    TITLE
    ARTIST
    COUNTRY
    COMPANY
    PRICE
    YEAR
  CD 
    TITLE
    ARTIST
    COUNTRY
    COMPANY
    PRICE
    YEAR
  ...

标签: pythonxmlbeautifulsouptree

解决方案


这是一个快速的方法:使用该prettify()函数对其进行结构化,然后通过正则表达式获取缩进和开始标记名称(在这种情况下捕获开始标记内的大写单词)。如果来自的压痕pretify()符合深度规范,则以指定的压痕尺寸打印。

import requests, bs4
import re

maxdepth = 1
indent_size = 2
s = requests.get('https://www.w3schools.com/xml/cd_catalog.xml').text
x = bs4.BeautifulSoup(s, 'xml').prettify()

for line in x.split("\n"):
    match = re.match("(\s*)<([A-Z]+)>", line)
    if match and len(match.group(1)) <= maxdepth:
        print(indent_size*match.group(1) + match.group(2))

推荐阅读