使用元素树用 Python 解析 XML Soap 响应
Parsing XML Soap Response With Python using Element Tree
我有一个 XML 这种格式的 Soap 响应,其中包含以下信息用户名:Fulname:状态:状态持续时间:
<return>
<columns>
<values>
<data>Username</data>
<data>Full Name</data>
<data>State</data>
<data>State Duration</data>
</values>
</columns>
<rows>
<values>
<data>user1@test.com</data>
<data>User1</data>
<data>Logged Out</data>
<data>309</data>
</values>
</rows>
<rows>
<values>
<data>user2@test.com</data>
<data>User2</data>
<data>Logged In</data>
<data>165</data>
</values>
</rows>
<rows>
<values>
<data>user3@test.com</data>
<data>User3</data>
<data>Logged Out</data>
<data>109</data>
</values>
</rows>
</return>
我想获得登录用户总数,在这种情况下结果将是 - “1”
登录用户的名称 - "user2"
以及状态持续时间的总和 - 309+165+109
首先,我使用
from xml.etree import ElementTree
root = ElementTree.fromstring(input_data['tmp'])
tree = ElementTree.parse(input_data['tmp'])
print tree.find('.//Data').text
input_data = """<return>
<columns>
<values>
<data>Username</data>
<data>Full Name</data>
<data>State</data>
<data>State Duration</data>
</values>
</columns>
<rows>
<values>
<data>user1@test.com</data>
<data>User1</data>
<data>Logged Out</data>
<data>309</data>
</values>
</rows>
<rows>
<values>
<data>user2@test.com</data>
<data>User2</data>
<data>Logged In</data>
<data>165</data>
</values>
</rows>
<rows>
<values>
<data>user3@test.com</data>
<data>User3</data>
<data>Logged Out</data>
<data>109</data>
</values>
</rows>
</return>"""
from xml.etree import ElementTree
root = ElementTree.fromstring(input_data)
data = [c.text for c in root.findall('.//rows/values/data')]
i = 1
for u, l in zip(data[::4], data[2::4]):
if l == 'Logged In':
print('"%i" Name of logged in users - "%s"' % (i, u))
i += 1
print('Duration: %i' % sum(int(d) for d in data[3::4]))
输出:
"1" Name of logged in users - "user2@test.com"
Duration: 583
我有一个 XML 这种格式的 Soap 响应,其中包含以下信息用户名:Fulname:状态:状态持续时间:
<return>
<columns>
<values>
<data>Username</data>
<data>Full Name</data>
<data>State</data>
<data>State Duration</data>
</values>
</columns>
<rows>
<values>
<data>user1@test.com</data>
<data>User1</data>
<data>Logged Out</data>
<data>309</data>
</values>
</rows>
<rows>
<values>
<data>user2@test.com</data>
<data>User2</data>
<data>Logged In</data>
<data>165</data>
</values>
</rows>
<rows>
<values>
<data>user3@test.com</data>
<data>User3</data>
<data>Logged Out</data>
<data>109</data>
</values>
</rows>
</return>
我想获得登录用户总数,在这种情况下结果将是 - “1” 登录用户的名称 - "user2" 以及状态持续时间的总和 - 309+165+109
首先,我使用
from xml.etree import ElementTree
root = ElementTree.fromstring(input_data['tmp'])
tree = ElementTree.parse(input_data['tmp'])
print tree.find('.//Data').text
input_data = """<return>
<columns>
<values>
<data>Username</data>
<data>Full Name</data>
<data>State</data>
<data>State Duration</data>
</values>
</columns>
<rows>
<values>
<data>user1@test.com</data>
<data>User1</data>
<data>Logged Out</data>
<data>309</data>
</values>
</rows>
<rows>
<values>
<data>user2@test.com</data>
<data>User2</data>
<data>Logged In</data>
<data>165</data>
</values>
</rows>
<rows>
<values>
<data>user3@test.com</data>
<data>User3</data>
<data>Logged Out</data>
<data>109</data>
</values>
</rows>
</return>"""
from xml.etree import ElementTree
root = ElementTree.fromstring(input_data)
data = [c.text for c in root.findall('.//rows/values/data')]
i = 1
for u, l in zip(data[::4], data[2::4]):
if l == 'Logged In':
print('"%i" Name of logged in users - "%s"' % (i, u))
i += 1
print('Duration: %i' % sum(int(d) for d in data[3::4]))
输出:
"1" Name of logged in users - "user2@test.com"
Duration: 583