我有来自亚特兰西安人群Rest的XML响应示例,而真正的XML响应要大得多。我正在尝试使用Python解析ElementTree。
以下是名为crowd.xml的XML文件
<?xml version='1.0' encoding='utf-8'?>
<memberships>
<membership group="crowd-administrators">
<users>
<user name="admin" />
<user name="bilcy@abc.com" />
</users>
<groups>
</groups>
</membership>
<membership group="developers">
<users>
<user name="johns" />
<user name="millers" />
<user name="peeryj" />
</users>
<groups>
</groups>
</membership>
</memberships>在这个来自亚特兰西安人群的API响应中,我需要提取所有组名的列表,比如人群管理员和开发人员。我需要一个列表或字典的所有用户名在每一组。我还需要列出特定组中的所有用户。
我试图使用XPath,但无法获得组名和用户名的值。
def parseXML(xmlfile):
tree = ET.parse(xmlfile)
root = tree.getroot()
users = tree.findall(".//user[@name='admin']")
print(users)
parseXML("crowd.xml")这个不印任何东西。
我能够用ET.fromstring打印出整个XML。
def parseXML2():
url = 'http://localhost:8095/crowd/rest/usermanagement/latest/group/membership'
response = requests.get(url, auth=("app-name", "passwd"))
xml_response = ET.fromstring(response.content)
print(xml_response)
parseXML2()为此,我会使用JSON输出,但是这个API不支持JSON输出。不知道如何提取其中的组名和用户。任何帮助提取数据将不胜感激。提亚
发布于 2022-06-04 11:38:47
,我需要提取所有组名的列表,比如群管理员和开发人员。我需要一个列表或字典的所有用户名在每一组。
如下所示
import xml.etree.ElementTree as ET
from collections import defaultdict
xml = '''<?xml version='1.0' encoding='utf-8'?>
<memberships>
<membership group="crowd-administrators">
<users>
<user name="admin" />
<user name="bilcy@abc.com" />
</users>
<groups>
</groups>
</membership>
<membership group="developers">
<users>
<user name="johns" />
<user name="millers" />
<user name="peeryj" />
</users>
<groups>
</groups>
</membership>
</memberships>
'''
data = defaultdict(list)
root = ET.fromstring(xml)
for m in root.findall('.//membership'):
group_name = m.attrib['group']
for u in m.findall('.//user'):
data[group_name].append(u.attrib['name'])
print(data)输出
defaultdict(<class 'list'>, {'crowd-administrators': ['admin', 'bilcy@abc.com'], 'developers': ['johns', 'millers', 'peeryj']})https://stackoverflow.com/questions/72490800
复制相似问题