2016-11-25 2 views
0

Ich bin neu in XPath und nicht sicher, wie der Attributwert eines übergeordneten Elements abgerufen wird, wenn ein bestimmtes untergeordnetes Element vorhanden ist.Wie erhält man den Attributwert eines Elternelements in Xpath, wenn Child-Element existiert?

<planet name="Earth" star="Sun"> 
     <primary> 
      <oxygen>20.95%</oxygen> 
      <water>70.8%</water> 
     </primary> 
</planet> 

Was mein XPath sein sollte <planet> das @name Attribut aus dem Elemente zu erhalten, wenn das <oxygen> Element vorhanden innerhalb der primären ist?

Antwort

-1

Die richtige Antwort hängt von Ihnen aktuellen XPath axis. Also, wenn Ihre aktuelle Achse <oxygen> der XPath-Ausdruck ist das @name Attribut des Elements zugreifen <planet> wäre:

../../@name 

Oder in einem XSLT Ausdruck eingekapselt:

<xsl:value-of select="../../@name" /> 
2

Sie ein Prädikat verwenden kann, um aussehen den Baum hinunter. Dies wählt alle planet Elemente mit primary/oxygen Unterelementen aus. Ich habe ein Wurzelelement hinzugefügt, vorausgesetzt, das ist irgendwo in einem Dokument vergraben.

import lxml.etree 

doc = lxml.etree.fromstring("""<root> 
<planet name="Earth" star="Sun"> 
     <primary> 
      <oxygen>20.95%</oxygen> 
      <water>70.8%</water> 
     </primary> 
</planet> 
</root>""") 

print(doc.xpath('planet[primary/oxygen]/@name')) 
+0

http://www.freeformatter.com/xpath-tester.html#ad-output – buttowski

Verwandte Themen