Je vais avoir un moment difficile de trouver un bon exemple de base de l'analyse de XML en python à l'aide de l'Élément de l'Arbre. De ce que je peux trouver, cela semble être la méthode la plus simple de la bibliothèque à utiliser pour l'analyse de XML. Voici un exemple de XML, je travaille avec:
<timeSeriesResponse>
<queryInfo>
<locationParam>01474500</locationParam>
<variableParam>99988</variableParam>
<timeParam>
<beginDateTime>2009-09-24T15:15:55.271</beginDateTime>
<endDateTime>2009-11-23T15:15:55.271</endDateTime>
</timeParam>
</queryInfo>
<timeSeries name="NWIS Time Series Instantaneous Values">
<values count="2876">
<value dateTime="2009-09-24T15:30:00.000-04:00" qualifiers="P">550</value>
<value dateTime="2009-09-24T16:00:00.000-04:00" qualifiers="P">419</value>
<value dateTime="2009-09-24T16:30:00.000-04:00" qualifiers="P">370</value>
.....
</values>
</timeSeries>
</timeSeriesResponse>
Je suis capable de faire ce dont j'ai besoin, à l'aide d'un codée en dur de la méthode. Mais j'ai besoin de mon code pour être un peu plus dynamique. Voici ce qui a fonctionné:
tree = ET.parse(sample.xml)
doc = tree.getroot()
timeseries = doc[1]
values = timeseries[2]
print child.attrib['dateTime'], child.text
#prints 2009-09-24T15:30:00.000-04:00, 550
Voici un couple de choses que j'ai essayé, aucun d'entre eux travaillaient, déclarant qu'ils ne pouvaient pas trouver timeSeries (ou d'autre chose, j'ai essayé):
tree = ET.parse(sample.xml)
tree.find('timeSeries')
tree = ET.parse(sample.xml)
doc = tree.getroot()
doc.find('timeSeries')
Fondamentalement, je veux charger le fichier xml, recherche pour l'timeSeries tag, et parcourir la valeur des balises, de retourner la date et la valeur de la balise elle-même; tout ce que je fais dans l'exemple ci-dessus, mais pas le codage en dur des sections de xml, je suis intéressé. Quelqu'un peut-il m'indiquer quelques exemples, ou me donner quelques suggestions sur la façon de travailler à travers cela? Merci pour votre aide
Mise à JOUR (11/24/09): Merci pour toute l'aide. En utilisant à la fois des solutions ci-dessous travaillé sur l'exemple de fichier que j'ai à condition, toutefois, qu'elles ne travaillent pas sur la totalité du fichier. Voici l'erreur que je reçois de la réelle fichier lorsque j'utilise Ed Carrel de la méthode:
(<type 'exceptions.AttributeError'>, AttributeError("'NoneType' object has no attribute 'attrib'",), <traceback object at 0x011EFB70>)
Je disais qu'il y avait quelque chose dans le fichier réel, il n'aime pas, donc je incremently choses enlevées jusqu'à ce qu'il a travaillé. Voici les lignes que j'ai changé:
originally: <timeSeriesResponse xsi:schemaLocation="a URL I removed" xmlns="a URL I removed" xmlns:xsi="a URL I removed">
changed to: <timeSeriesResponse>
originally: <sourceInfo xsi:type="SiteInfoType">
changed to: <sourceInfo>
originally: <geogLocation xsi:type="LatLonPointType" srs="EPSG:4326">
changed to: <geogLocation>
En supprimant les attributs qui ont " xsi:...' résolu le problème. Est le " xsi:...' pas valide XML? Ça va être dur pour moi de supprimer ces par programmation. Toute proposition de solutions?
Voici tout le fichier XML: http://www.sendspace.com/file/lofcpt
Merci encore
Casey
Mise à JOUR (11/24/11)
Quand j'ai d'abord posé cette question, j'étais pas au courant des espaces de nommage dans XML. Maintenant que je sais ce qu'il se passe, je n'ai pas à supprimer le "xsi" des attributs, qui sont les déclarations d'espace de noms. Je viens de les inclure dans mon xpath recherches. Voir cette page pour plus d'informations sur les espaces de noms dans lxml.