2010-12-17 8 views
0

Gibt es etwas, das ich verwenden kann, um XML in Python abzufragen, wie ich in LINQ2XML tun kann? Und wenn es auch auf appeengine laufen würde. Pseudocode:Gibt es so etwas wie LINQ zu XML in Python für appengine?

xml = fetch("http://foo/bar.xml") 
for person : xml.elements("person"): 
    print(person.attribute("name")) 
    for number : person.elements("number") 
    print(" %s %d",(number.attribute("type"),number.attribute("value")) 

Antwort

4

Ja. Beispiel XML-Datei:

<?xml version="1.1" encoding="iso-8859-1"?> 
<container> 
    <person name="Jim"> 
    <number type="home" value="000-000-0000"/> 
    <number type="work" value="111-111-1111"/> 
    </person> 
    <person name="Fred"> 
    <number type="home" value="222-222-2222"/> 
    <number type="work" value="333-333-3333"/> 
    </person> 
</container> 

Beispielscript:

from xml.etree.ElementTree import ElementTree 

f = open('/path/to/xml/file', 'r') 

xml = ElementTree(file=f) 
for person in xml.findall('person'): 
    print(person.attrib['name']) 
    for number in person.findall('number'): 
     print('%s -> %s' % (number.attrib['type'], number.attrib['value'])) 

druckt:

Jim 
home -> 000-000-0000 
work -> 111-111-1111 
Fred 
home -> 222-222-2222 
work -> 333-333-3333 

Es ist ein Teil von Python 2.5, so sollte es in App Engine arbeiten. Sie können das Skript anpassen, um den XML-Code von einer URL abzurufen.

+0

+1 zum Erstellen von Beispiel-XML aus Code :-) – Axarydax

2

Sie die ElementTree XML API dafür verwenden können. Beispiel:

import xml.etree.ElementTree as ET 

xml = ET.parse("bar.xml") 
for person in xml.findall("person"): 
    print person.attrib["name"] 
    for number in person.findall("number"): 
     print " %s %d" % (number.attrib["type"], int(number.attrib["value"]))