【问题标题】:How to check if xml tag value is none in python如何检查python中的xml标记值是否为none
【发布时间】: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 中 &lt;EMAILID&gt; 元素是空的,当然 .textNone。当您尝试使用./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: ...

标签: python xml xml.etree


【解决方案1】:

您使用的是 lxml 包吗?因为有了

from lxml.etree import ElementTree, fromstring
data = """..."""  # your XML string here 
tree = ElementTree(fromstring(data))

我发现您有语法错误。

此外,您要检索 的文本吗?因为这里根本没有文字。

第一次编辑:

from xml.etree import ElementTree

data = """..."""  # Your XML string
tree = ElementTree.ElementTree(ElementTree.fromstring(data))
root = tree.getroot()

for l in root.findall("./FCDB_BODY/EMAILID"):
    if l is not None:
        xml_email = l.text
        if xml_email:
            print("XML Email is", xml_email)
        else:
            print("There is no email for this entry")
    else:
        pass

【讨论】:

  • 对不起,我正在使用 xml.etree。我也确实想检索 的文本,但由于我正在执行许多请求,因此有时标签为空。所以我想在这里添加任何条件来检查是否有价值
猜你喜欢
  • 1970-01-01
  • 2023-03-02
  • 2014-06-29
  • 2011-03-28
  • 1970-01-01
  • 2015-11-24
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多