【发布时间】:2019-11-15 13:57:18
【问题描述】:
我正在尝试比较两个 api 响应的数据。其中之一返回 xml。问题是 xml 响应中的标记之一为空。我找不到检查值是否存在的方法。
这里是xml响应
<?xml version="1.0" encoding="UTF-8"?>
<FCDB_RES_ENV>
<FCDB_HEADER>
<SOURCE>FCAT</SOURCE>
<FCDBCOMP>FCDB</FCDBCOMP>
<MSGID>MB_31051021591539014</MSGID>
<CORRELID>MB_31051021591539014</CORRELID>
<USERID>615</USERID>
<BRANCH>000</BRANCH>
<MODULEID>LGN</MODULEID>
<SERVICE>GetEmailMobNoDetails</SERVICE>
<OPERATION>GetEmailMobNoDetails</OPERATION>
<SOURCE_USERID>FCAT</SOURCE_USERID>
<DESTINATION>FCDB</DESTINATION>
<COUNTRYCODE>T001</COUNTRYCODE>
<USERTYPE>ENS</USERTYPE>
<LANGID>eng</LANGID>
<CHANNELID>01</CHANNELID>
</FCDB_HEADER>
<FCDB_BODY>
<EMAILID/>
<MOBNO>03006846625</MOBNO>
<FCDB_ERROR_RESP>
<ERROR>
<ECODE>00</ECODE>
<EDESC>Your transaction has been processed successfully.</EDESC>
</ERROR>
</FCDB_ERROR_RESP>
<FCDB_WARNING_RESP>
<WARNING>
<WCODE/>
<WDESC/>
</WARNING>
</FCDB_WARNING_RESP>
</FCDB_BODY>
</FCDB_RES_ENV>
请注意返回 None 值。
这里是需要修改的代码。提前致谢。
response = requests.request("POST", url, data=payload.format(cust_no, cust_type), headers=headers)
tree = ElementTree.ElementTree(ElementTree.fromstring(response2.text))
root = tree.getroot()
for l in root.findall("./FCDB_BODY/EMAILID"):
if l is not None:
xml_email = l.text
print("XML Email is", xml_email)
else:
pass
【问题讨论】:
-
您的“XML 响应”不是 XML(或者您仅粘贴了一部分)。在任何情况下,XML 都是无效的。
-
@Tomalak 我粘贴了一部分。让我编辑和编写有效的 xml
-
啊,这样更好。然而,在这个 XML 中
<EMAILID>元素是空的,当然.text是None。当您尝试使用./FCDB_BODY/MOBNO时会得到什么? -
我得到的值在这种情况下是“03006846625”。我想在获取
值之前检查它是否为空。我该怎么做?我找不到插入 if else here 的方法 -
emailid = root.find("./FCDB_BODY/EMAILID")(不是.findall()- 无论如何你只希望一击)然后:if emailid is None or emailid.text is None or emailid.text == "": ... else: ...