2016-12-18 1 views
1

Ich versuche, einige Daten aus einer bestimmten XML-Datei zu extrahieren. Daher muss ich einige spezifische Knoten anhand ihrer Attributwerte auswählen. Meine XML sieht wie folgt aus:Wählen Sie Xml-Knoten von Xpath mit Attributwert mit Apostroph

<?xml version="1.0" encoding="UTF-8" ?> 
<svg ....> 
    .... 
    <g font-family="'BentonSans Medium'" font-size="12"> 
     <text>bla bla bla</text> 
     .... 
    </g> 
    .... 
</svg> 

Ich habe versucht, die apostrophs im Wert zu entkommen, aber ich konnte es nicht funktioniert.

from lxml import etree as ET 

tree = ET.parse("file.svg") 
root = tree.getroot() 

xPath = ".//g[@font-family='&apos;BentonSans Medium&apos;]" 
print(root.findall(xPath)) 

ich immer Fehler dieser Art erhalten:

File "C:\Python34\lib\site-packages\lxml\_elementpath.py", line 214, in prepare_predicate 
raise SyntaxError("invalid predicate") 

Wer Ideen habe, wie diese Knoten mit XPath wählen?

Antwort

0

Versuchen Sie folgendes:

xPath = ".//g[@font-family=\"'BentonSans Medium'\"]" 

Ihr Code schlägt fehl, weil Sie nicht die Schließung Apostroph gesetzt haben:

xPath = ".//g[@font-family='&apos;BentonSans Medium&apos;]" 

Es nach dem letzten &apos; sein sollte:

xPath = ".//g[@font-family='&apos;BentonSans Medium&apos;']" 

Aber es tut es nicht mache den XPath-Ausdruck korrekt, da &apos; so interpretiert wird wie er ist.


By the way, wenn Sie überprüfen möchten, ob die font-familyenthält die angegebene Zeichenfolge, verwenden contains() XPath-Funktion mit dem xpath Methode:

xPath = '//g[contains(@font-family, "BentonSans Medium")]' 
print(root.xpath(xPath)) 

Ausgabe

[<Element g at 0x7f2093612108>] 

Der Beispielcode ruft alleabElemente mit font-family Attributwerten, die BentonSans Medium Zeichenfolge enthalten.

Ich weiß nicht, warum die findall Methode nicht mit funktioniert, aber die xpath scheint flexibler zu gestalten, und ich würde stattdessen mit dieser Methode empfehlen.

+0

vielen Dank. Deine kleine Syntaxanpassung hat es geschafft! – monchi

Verwandte Themen