Python lxml (objektivieren): Xpath Probleme

Ich versuche, ein XML-Dokument zu analysieren, indem ich Daten mit lxml objectify und xpath extrahiere. Hier ist ein Snip des Dokuments:

<?xml version="1.0" encoding="UTF-8"?> <Assets> <asset name="Adham"> <pos> <x>27913.769923</x> <y>5174.627773</y> </pos> <description>Ba bla bla</description> <bar>(null)</bar> </general> </asset> <asset name="Adrian"> <pos> <x>-179.477707</x> <y>5286.959359</y> </pos> <commodities/> <description>test test test</description> <bar>more bla</bar> </general> </asset> </Assets> 

Ich habe die folgende Methode:

 def getALLattributesX(self, _root): '''Uses getattributeX and parses through the attribute dict, assigning values as it goes. _root is the main document root''' for k in self.attrib: self.getattributeX(_root, self.attribPaths[k], k) 

… das nennt diese Methode:

 def getattributeX(self, node, x_path, _attrib): '''Gets a value from an xml node indicated by an xpath and assigns it to a the appropriate. If node does not exists it assigns "error" ''' print node.xpath(x_path)[0].text try: self.attrib[_attrib] = node.xpath(x_path) except KeyError: self.misload = True #except AttributeError: # self.attrib[attrib] = "error loading " + attrib #self.misload = True 

Die Druckaussage ist vom Testen. Wenn ich die erste Methode ausführe, analysiere sie durch das XML-Dokument, das erfolgreich an jedem Asset-Objekt stoppt. Ich habe ein Dict von Variablen für sie zu finden, und ein kostenloses Dict von Pfaden für sie zu verwenden, wie hier definiert:

 class tAssetList: alist = {} #dict of assets tlist = [] tree = None # XML tree root = None #root elem def readXML(self, _filename): #Load file fileobject = open(_filename, "r") #read-only self.tree = objectify.parse(fileobject) self.root = self.tree.getroot() for elem in self.root.asset: temp_asset = tAsset() a_name = elem.get("name") # get name, which is the key for dict temp_asset.getALLattributesX(elem) self.alist[a_name] = temp_asset class tAsset(obs.nxObject): def __init__(self): self.attrib = {"X_pos" : None, "Y_pos" : None} self.attribPaths = {"X_pos" : '/pos/x', "Y_pos" : '/pos/y'} 

Allerdings scheint xpath nicht zu funktionieren, wenn ich es auf dem Knoten nennen (was ein objektivierter xml-Knoten ist). Es gibt einfach [] aus, wenn ich es gleich gleich finde, und es gibt einen Index außerhalb des Bereichsfehlers, wenn ich versuche: [0] .text.

Was geht hier vor sich?

One Solution collect form web for “Python lxml (objektivieren): Xpath Probleme”

/pos/x und /pos/y sind absolute XPath-Ausdrücke und sie wählen kein Element aus, da das angegebene XML-Dokument kein pos Top-Element hat.

Versuchen Sie :

 pos/x 

und

 pos/y 
  • Wie suche ich in XPath in multiline Text mit Python?
  • Anfänger zum Schaben, bleib immer leere Listen
  • Extrahieren von Tabellen aus einem DOCX Word Dokument in Python
  • Finden Sie ein Element in einem XML-Baum mit ElementTree
  • Python lxml XPath Problem
  • Wie benutzt man Xpath in Python?
  • Lxml find <div> mit id = 'post- [0-9] *' [duplizieren]
  • Wie bekomme ich den kompletten Inhalt eines Knotens mit xpath & lxml?
  • Holen Sie sich den Text aus mehreren Elementen mit der gleichen Klasse in Selen für Python?
  • XPath: Tag mit leerem Wert auswählen
  • Wie lxml xpath-Funktionen in den Standard-Namespace importieren?
  • Python ist die beste Programmiersprache der Welt.