Ich habe eine Pom-Datei, die folgendermaßen definiert ist:
%Vor% Und ich suche ein Wörterbuch aus dem name
& amp; value
Elemente unter property
unter dem mappings
Element.
Also, was ich versuche herauszufinden, wie man alle möglichen mappings
-Elemente (im Falle mehrerer Build-Profile) bekommt, damit ich alle property
-Elemente darunter bekommen kann und über Unterstützte XPath-Syntax Folgendes sollte alle möglichen Text / Wert-Elemente ausgeben:
Was nichts zurückgibt. Ich habe versucht, nur alle mappings
Elemente auszudrucken und bekomme:
Und wenn ich alles von root
ausdrucke bekomme ich:
Was mich dazu brachte zu drucken:
%Vor%Aber das funktioniert auch nicht.
Irgendwelche Vorschläge wären großartig.
Danke,
Ok, habe herausgefunden, dass ich, wenn ich maven stuff aus dem project
-Element lösche, so dass es nur <project>
gibt:
Was dazu führen würde:
%Vor%Wenn ich jedoch das Maven-Zeug oben lasse, kann ich das tun:
%Vor%Was ergibt:
%Vor%Allerdings würde ich gerne herausfinden, wie ich vermeiden kann, das Maven-Konto zu berücksichtigen, da es mich in dieses eine Format einsperrt.
BEARBEITEN:
Ok, ich habe es geschafft, etwas etwas wortreicher zu bekommen:
%Vor%Ich habe eine pom.xml mit Python geändert. Es scheint, dass etree nicht sehr gut dokumentiert ist. Es dauerte eine Weile, bis alles funktionierte, aber es scheint jetzt zu funktionieren.
Wie Sie im folgenden Codeausschnitt sehen können, verwendet Maven den Namensraum http://maven.apache.org/POM/4.0.0
. Das Attribut xmlns
im Stammknoten definiert den Standard-Namespace. Das Attribut xmlns:xsi
definiert ebenfalls einen Namensraum, wird aber nur für xsi:schemaLocation
verwendet.
Um Tags wie profile
in Methoden wie find
zu verwenden, müssen Sie auch den Namespace angeben. Zum Beispiel könnten Sie Folgendes schreiben, um alle profile
-Tags zu finden.
Eine weitere wichtige Sache ist //
hier. Wenn Sie Ihre XML-Datei verwenden, würde */
dasselbe Ergebnis für dieses Beispiel haben. Aber funktioniert nicht für andere Tags wie mappings
. Da *
nur eine Ebene darstellt, kann */child
auf parent/tag
oder xyz/tag
erweitert werden, nicht jedoch auf xyz/parent/tag
.
Ich denke, das sind die Hauptprobleme in Ihrem obigen Code. Sie müssen //
anstelle von */
verwenden, um beliebige Unterelemente anstelle von direkten Kindern zuzulassen. Und Sie müssen den Namespace angeben. Damit können Sie so etwas machen, um alle Zuordnungen zu finden:
Aber die Namespaces wie oben zu spezifizieren ist nicht sehr nett. Sie können eine Namespace-Map definieren und sie als zweites Argument für find
und findall
angeben:
Tags und Links python xml xml-parsing python-2.7