Python - 如何使用Python查明是否存在特定的XML节点?

时间:2017-06-07 02:16:17

标签: python

以下是我所拥有的一些XML代码的示例:

<VAST version="2.0">
<Ad id="602678">
<InLine>
<AdSystem>Acudeo Compatible</AdSystem>
<AdTitle>NonLinear Test Campaign 1</AdTitle>
<Description>NonLinear Test Campaign 1</Description>
<Creatives>
<Creative AdID="602678-NonLinear">
</Creative>
</Creatives>
</InLine>
</Ad>
</VAST>

此XML在线提供,因此我点击了特定的URL以获取此数据。但是,在某些情况下,没有返回任何内容,因此我正在寻找一种方法来验证“Creatives”节点是否存在于任何给定时间返回的任何内容中。我没有运气试过BeautifulSoup,但我认为更多的是HTML而不是XML。非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

假设你从这样的URL中检索XML:

import requests

r = requests.get(url)
if r.status_code == 200:
    xml_tag_exists(r)

然后你只需构建一个简单的函数,它将根据所需的XML标记是否存在返回True / False

def xml_tag_exists(r):
    return '<Creatives>' in r.text

例如,让我们选择following URL

>>> import requests
>>> url = 'http://www.w3schools.com/xml/plant_catalog.xml'
>>> r = requests.get(url)
>>> if r.status_code == 200:
...     print(r.text)

以上将返回以下格式的XML:

<CATALOG>
  <PLANT>
    <COMMON>Bloodroot</COMMON>
    <BOTANICAL>Sanguinaria canadensis</BOTANICAL>
    <ZONE>4</ZONE>
    <LIGHT>Mostly Shady</LIGHT>
    <PRICE>$2.44</PRICE>
    <AVAILABILITY>031599</AVAILABILITY>
  </PLANT>
  <PLANT>
    <COMMON>Columbine</COMMON>
    <BOTANICAL>Aquilegia canadensis</BOTANICAL>
    <ZONE>3</ZONE>
    <LIGHT>Mostly Shady</LIGHT>
    <PRICE>$9.37</PRICE>
    <AVAILABILITY>030699</AVAILABILITY>
  </PLANT>
  ...
</CATALOG>

如果我们检查一些标签:

>>> if '<CATALOG>' in r.text:
...     print(True)
...
True

所以,如果我这样做,我会写下这样的东西:

import requests


def xml_tag_exists(r):
    return '<Creatives>' in r.text


def main():
    r = requests.get('your_url_goes_here')
    if r.status_code == 200:
        xml_tag_exists(r)

if __name__ == '__main__':
    main()

答案 1 :(得分:0)

您也可以使用XPath

from lxml import etree

f = StringIO(YOURS_XML)
tree = etree.parse(f)

creatives_node = tree.xpath('/Creatives')