Frage

Ich habe Probleme, das Attribut XPath Selector in ElementTree verwenden, die ich in der Lage sollte nach dem

War es hilfreich?

Lösung

Die Syntax Sie verwenden möchten, ist neu in ElementTree 1.3 .

Eine solche Version wird ausgeliefert mit Python 2.7 oder höher. Wenn Sie Python 2.6 oder weniger Sie haben noch ElementTree 1.2.6 oder weniger.

Andere Tipps

Es gibt mehrere Probleme in diesem Code.

  1. Pythons buildin ElementTree (ET kurz) hat keine wirkliche XPath-Unterstützung; nur eine begrenzte Teilmenge von beispielsweise nicht unterstützt wird find-from-root Ausdrücke wie //target.

    Hinweis: die Dokumentation " // " erwähnt, aber nur für Kinder: So einen Ausdruck als .//target gültig ist; //... ist es nicht!

    Es gibt eine alternative Implementierung: lxml , die reicher ist. Es ist Nähte, die Dokumentation verwendet wird, für den Build-in-Code. Das stimmt nicht überein / Arbeit.

  2. Die @name Notation wählt XML- Attribute ; der key=value Ausdruck innerhalb eines XML-Tags.

    Damit Name-Wert 1 oder 2 sein, etwas in dem gegebenen Dokument auszuwählen. Oder kann man für Ziele mit einem Kind suchen Element 'a' . target[a] (keine @)

Für das gegebene Dokument analysiert mit dem build-in ElementTree (v1.3) zu root, der folgende Code korrekt ist und Arbeiten:

  • root.findall(".//target") beide Ziele finden
  • root.findall(".//target/a") Finden zwei a-Element
  • root.findall(".//target[a]") Dies findet sowohl ziel Element wieder, da beide ein a-Element
  • root.findall(".//target[@name='1']") Finden nur die zuerst Ziel. Beachten Sie die Anführungszeichen um 1 erforderlich sind; sonst ein Syntax angehoben
  • root.findall(".//target[a][@name='1']") auch gültig; dieses Ziel
  • finden
  • root.findall(".//target[@name='1']/a") Findet nur ein a-Element; ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top