python - 用 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
...
解决方案
这是一个快速的方法:使用该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))
推荐阅读
- android - 使用 Hilt 注入 LiveData 实例 - 好还是坏?
- r - 根据另一个数据框中的字符串数据对数据框中的行(带有字符串变量)进行分类
- javascript - 如何将地图对象设置为赛普拉斯结果 json 文件
- flutter - 如何在不包括图标的颤动中与图像共享文本?
- python - 错误:命令出错,退出状态为 1:当我尝试使用 pip 安装 geopandas 时
- javascript - three.js - 丢弃透明片段
- angular - Github 推送到多个仓库
- xcode - 如何在 XCode 中生成 iOS 13 SwiftUI 项目?
- javascript - NodeJS:将字段值从 ResolverQuery 传递到另一个 JS 文件
- javascript - 如何使用react,typescript和formik根据另一个表单字段设置表单字段的值?