我在解析此XML时遇到问题。我对python很新,所以我可能不理解一个概念,或者我可能错过了一步。
XML块:
<result created="2015-12-05T12:46:00-06:00" host="www.systemmonitor.us" status="OK">
<items>
<client>
<clientid>67300</clientid>
<name>
<![CDATA[ ACME Company ]]>
</name>
<site>
<siteid>85663</siteid>
<name>
<![CDATA[ Los Angeles ]]>
</name>
<workstations/>
<servers>
<server>
<id>597207</id>
<name>
<![CDATA[ SERVER1 ]]>
</name>
<offline>
<description>
<![CDATA[ OFFLINE - MAINTENANCE MODE ]]>
</description>
<startdate>2015-11-25</startdate>
<starttime>01:40:07</starttime>
</offline>
</server>
<server>
<id>2252213</id>
<name>
<![CDATA[ SERVER2 ]]>
</name>
<overdue>
<description>
<![CDATA[ Overdue ]]>
</description>
<startdate>2015-11-25</startdate>
<starttime>01:57:40</starttime>
</overdue>
</server>
</servers>
</site>
</client>
我需要提取某些元素,以便将这些元素推送到我们的CRM系统中。
这是我的代码:
import requests
import xml.etree.ElementTree as ET
url = "https://www.systemmonitor.us/api/"
querystring = {"apikey":"SUPERSECRETAPIKEY","service":"list_failing_checks"}
response = requests.request("GET", url, params=querystring)
msg = response.text
tree = ET.ElementTree(ET.fromstring(msg))
client_ids = tree.find('clientid')
print client_ids
如果我尝试从msg.find('clientid')获取client_id,它只返回一个整数。 144.(我假设它是在xml中找到它的次数。)如果我使用tree.find('clientid')我得到[]。我还没有尝试迭代数据,因为我似乎无法找到它。
我想我已经尝试了所有可以找到和想到的其他组合,但我无法解决这个问题。 find(),findall()等。我的大脑因在桌子上猛击它而受伤。
我需要隔离clientid,name,overdue / description。
有人可以解释一下我做错了什么或我错过了什么?谢谢。
答案 0 :(得分:1)
你必须提供完整的路径:
client_ids = tree.find('items/client/clientid')
或搜索所有出现的:
client_ids = tree.findall('.//clientid')
要获取元素的内容,例如
for client_id in client_ids:
print client_id.text