XPath-Prädikat mit Unterpfaden mit lxml?

7

Ich versuche zu verstehen und XPath, das mir für die Verwendung mit ACORD XML-Formularen (allgemeines Format in der Versicherung) gesendet wurde. Der XPath, den sie mir gesendet haben, ist (aus Platzgründen verkürzt):

%Vor%

Wo ich Probleme habe, ist, dass Pythons lxml -Bibliothek mir sagt, dass [InsuredOrPrincipalInfo/InsuredOrPrincipalRoleCd="AN"] ein invalid predicate ist. Ich bin nicht in der Lage, irgendwo in der XPath-Spezifikation auf Prädikaten zu finden, die diese Syntax identifiziert, damit ich kann dieses Prädikat ändern, um zu funktionieren.

Gibt es eine Dokumentation darüber, was genau dieses Prädikat auswählt? Ist das sogar ein gültiges Prädikat, oder wurde irgendwo etwas gemangelt?

Möglicherweise verwandt:

Ich glaube, die Firma, mit der ich arbeite, ist ein MS-Shop, also kann dieser XPath in C # oder einer anderen Sprache in diesem Stapel gültig sein? Ich bin mir nicht ganz sicher.

Aktualisierungen:

Pro Kommentar Nachfrage, hier ist ein paar zusätzliche Informationen.

XML-Beispiel:

%Vor%

Codebeispiel (mit vollständigem XPath statt Snippet):

%Vor%     
Jack M. 02.06.2011, 17:40
quelle

4 Antworten

18

Ändern Sie tree.find in tree.xpath . find und findall sind in lxml vorhanden, um die Kompatibilität mit anderen Implementierungen von ElementTree zu gewährleisten. Diese Methoden implementieren nicht die gesamte XPath-Sprache . Um XPath-Ausdrücke mit erweiterten Funktionen zu verwenden, verwenden Sie die Methode xpath , die Klasse XPath oder XPathEvaluator .

Zum Beispiel:

%Vor%

ergibt

%Vor%

während tree.find ergibt

%Vor%     
unutbu 03.06.2011, 18:17
quelle
3

Ihr Beispiel ist meiner Meinung nach völlig in Ordnung. Ich würde überprüfen, ob lxmls XPath-Implementierung einige dokumentierte Einschränkungen oder etwas ähnliches hat.

    
Achim 02.06.2011 17:50
quelle
1
%Vor%

Einige Probleme mit diesem Ausdruck :

  1. Die Endung / -Zeichen macht syntaktisch ungültig . Es markiert den Beginn eines neuen Standortschritts, aber es folgt nichts.

  2. Wie Dr. Michael Kay bemerkt hat, haben Sie möglicherweise Probleme mit verschachtelten Zitaten in Python.

Lösungsvorschlag :

%Vor%

In diesem Ausdruck werden doppelte Anführungszeichen durch einfache Anführungszeichen ersetzt. Die zweite Änderung ist das Entfernen der Endung / .

Update : Das OP hat jetzt ein vollständigeres Codebeispiel bereitgestellt, und ich kann überprüfen, ob der verwendete XPath-Ausdruck falsch ist. Unten ist seine Überprüfung mit XSLT:

%Vor%

, wenn diese Transformation auf das bereitgestellte XML-Dokument angewandt wird :

%Vor%

das gewünschte, korrekte Ergebnis wird erzeugt :

%Vor%

Fazit : Das Problem liegt entweder im Python-Code, oder (weniger wahrscheinlich) die verwendete XPath-Engine hat einen Fehler.

    
Dimitre Novatchev 03.06.2011 13:22
quelle
0

Der XPath, den Sie erhalten haben, ist vollkommen korrekt. Vielleicht ist das Problem bei der Einbettung in Python aufgetreten, wo Sie Python-Escape-Konventionen verwenden müssen, um die doppelten Anführungszeichen in einer Zeichenfolge zu umgehen?

    
Michael Kay 03.06.2011 07:10
quelle

Tags und Links