2017-06-07 119 views
1

下面是一些XML代碼我有一個樣本:Python - 如何查找使用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在線服務,所以我打了一個具體的網址,以獲取此回數據。但是,在某些情況下,不會返回任何內容,因此我正在尋找一種方法來驗證「Creatives」節點是否存在於任何給定時間返回的內容中。我曾嘗試BeautifulSoup但沒有運氣,但我認爲這是更多的HTML而不是XML。任何幫助非常感謝,謝謝。

+0

明文檢查有什麼問題?即'如果「」in your_returned_pa​​yload:...' – zwer

+0

我認爲我遇到的麻煩是在嘗試從我打的網址中抽取XML數據本身後解析XML數據。我將通過POST更新我的代碼。 – user7681184

回答

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 

所以,如果我這樣做,我d寫這樣的東西:

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() 
+0

只有在返回的內容僅爲「」而沒有其他內容的情況下,此功能纔有效。 – zwer

+0

@zwer這只是一個錯字。這意味着要在r.text中使用「」。感謝您的介紹。現在修復 – 2017-06-07 09:32:42

0

你也可以用XPath

from lxml import etree 

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

creatives_node = tree.xpath('/Creatives') 
相關問題