2016-04-16 11 views
0

Ich habe diese XML-Daten in einem String:Fehler: lxml.etree.XMLSyntaxError: erwartet '>'

<?xml version="1.0" encoding="UTF-8"?> 
<class name="C" kind ="concrete"> 
    <inheritance> 
     <from name="A" privacy="public" /> 
     <from name="B" privacy="public" /> 
    </inheritance> 
    <private> 
     <methods> 
      <method name="C" type="C" scope="instance"> 
       <arguments></arguments> 
     </methods> 
    </private> 
</class> 

ich mit XPath einige Elemente finden möchten. Was ist mein Code:

utf8_parser = etree.XMLParser(encoding='utf-8') 
root = etree.fromstring(string.encode('utf-8'), parser=utf8_parser) 
somelist = root.findall(xpathString) 

ich diesen Fehler hätte:

root = etree.fromstring(stringOutput.string.encode('utf-8'), parser=utf8_parser) 
    File "lxml.etree.pyx", line 3032, in lxml.etree.fromstring (src/lxml/lxml.etree.c:68106) 
    File "parser.pxi", line 1785, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:102455) 
    File "parser.pxi", line 1673, in lxml.etree._parseDoc (src/lxml/lxml.etree.c:101284) 
    File "parser.pxi", line 1074, in lxml.etree._BaseParser._parseDoc (src/lxml/lxml.etree.c:96466) 
    File "parser.pxi", line 582, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:91275) 
    File "parser.pxi", line 683, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:92461) 
    File "parser.pxi", line 622, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:91757) 
lxml.etree.XMLSyntaxError: expected '>', line 11, column 11 

Ich dachte, das Problem mit doppelten Anführungszeichen in der Zeichenfolge sein könnte. Ist es möglich? Wie sollte der richtige Code zum Finden der Elemente mit xpath aussehen?

+0

Ihr Methodenelement ist nicht geschlossen. –

+0

Habe ich nicht einfach [das sagen] (http://Stackoverflow.com/a/36668376/290085)? :-) – kjhughes

Antwort

2

Die doppelten Anführungszeichen, die Attributwerte abgrenzen, sind völlig in Ordnung, aber das Element method, das ein End-Tag nicht enthält, ist es nicht. Hier ist Ihr XML repariert, um wohlgeformt zu sein:

<?xml version="1.0" encoding="UTF-8"?> 
<class name="C" kind ="concrete"> 
    <inheritance> 
     <from name="A" privacy="public" /> 
     <from name="B" privacy="public" /> 
    </inheritance> 
    <private> 
     <methods> 
      <method name="C" type="C" scope="instance"> 
       <arguments></arguments> 
      </method> 
     </methods> 
    </private> 
</class> 
+0

Danke, aber ein weiterer Fehler tritt auf. 'lxml.etree.XMLSyntaxError: Öffnen und Ende der Tag-Übereinstimmung: Methoden Zeile 4 und Privat, Zeile 12, Spalte 19'. Benutze ich lxml-Funktionen richtig? –

+1

Der Fehler weist darauf hin, dass das Problem in Ihrem XML-Code liegt. Ich habe jedoch überprüft, ob der XML-Code in meiner Antwort wohlgeformt ist. Ich schlage vor, dass Sie sorgfältig überprüfen, dass Sie es genau wie bereitgestellt verwenden. Kopieren und Einfügen wäre sicherer als das erneute Erstellen von Hand. Wenn das nicht funktioniert, erstellen Sie ein [mcve], das das Problem veranschaulicht. – kjhughes

+0

Ich kopierte dein repariertes XML und benutzte genau das, also sollte das Problem nicht in der XML-Datei sein und das habe ich bekommen: 'Datei '/usr/lib/python3/dist-packages/lxml/_elementpath.py", Zeile 214, in prepare_predicate raisen SyntaxError ("ungültiges Prädikat") SyntaxError: ungültiges Prädikat' –