2017-06-07 13 views
1

Hier ist ein Beispiel von einigen XML-Code, den ich habe:Python - Wie kann ich herausfinden, ob ein bestimmter XML-Knoten mit Python vorhanden ist?

<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> 

Diese XML-Online serviert wird, so schlug ich eine bestimmte URL, um wieder diese Daten zu erhalten. In einigen Fällen wird jedoch nichts zurückgegeben, daher suche ich nach einer Möglichkeit, zu überprüfen, ob der "Creatives" -Knoten in dem vorhanden ist, was zu einem bestimmten Zeitpunkt zurückgegeben wird. Ich habe BeautifulSoup ohne Glück versucht, aber ich denke, das ist mehr für HTML als für XML. Jede Hilfe wird sehr geschätzt, danke.

+0

Was ist falsch mit der Klartextprüfung? if "" in your_returned_payload: ... ' – zwer

+0

Ich denke, die Schwierigkeiten, die ich habe, ist mit dem Parsen der XML-Daten selbst nach dem Versuch, es von der Web-URL, die ich treffe, zu ziehen. Ich werde per POST mit meinem Code aktualisieren. – user7681184

Antwort

1

Nehmen wir an, Sie die XML-Daten aus einer URL wie folgt abrufen:

import requests 

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

Dann müssen Sie nur eine einfache Funktion aufzubauen, die True/False basierend auf zurückkehren wird, ob die erforderliche XML-Tag vorhanden ist:

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

Zum Beispiel nehmen wir die 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) 

Die oben wird eine XML in der folgenden Form zurück:

<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> 

Was, wenn wir für einige Tag überprüfen:

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

Also, wenn ich das täte, würde ich Schreiben Sie etwas wie dieses:

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

Das funktioniert nur, wenn der zurückgegebene Inhalt nur "" und nichts anderes ist. – zwer

+0

@zwer es war nur ein Tippfehler. Es sollte "" in r.text' sein. Danke für Head-Ups. Jetzt behoben –

0

Sie können auch XPath verwenden

from lxml import etree 

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

creatives_node = tree.xpath('/Creatives') 
Verwandte Themen