2011-03-31 13 views
16

estoy recibiendo este error en elementtree cuando trato de ejecutar el código de abajo:Python - ElementTree- no puede utilizar la ruta absoluta en el elemento

SyntaxError: cannot use absolute path on element 

Mi documento XML tiene el siguiente aspecto:

<Scripts> 
    <Script> 
    <StepList> 
     <Step> 
     <StepText> 
     </StepText> 
     <StepText> 
     </StepText> 
     </Step> 
    </StepList> 
    </Script> 
</Scripts> 

Código:

import xml.etree.ElementTree as ET 

def search(): 
    root = ET.parse(INPUT_FILE_PATH) 
    for target in root.findall("//Script"): 
     print target.attrib['name'] 
     print target.findall("//StepText") 

estoy en Python 2.6 en Mac. ¿Estoy usando mal la sintaxis de Xpath?

Básicamente quiero mostrar todos los atributos del nombre de los elementos de Script si contiene un elemento StepText con cierto texto.

Respuesta

33

Resulta que necesito decir target.findall (".// StepText"). Supongo que cualquier cosa sin el '.' se considera un camino absoluto?

Actualización código de trabajo:

def search(): 
    root = ET.parse(INPUT_FILE_PATH) 
    for target in root.findall("//Script"): 
     stepTexts = target.findall(".//StepText") 
     for stepText in stepTexts: 
      if FIND.lower() in stepText.text.lower(): 
       print target.attrib['name'],' -- ',stepText.text 
+5

Cualquier expresión XPath comenzando con '' o '' operador/// es una expresión absoluta. Además de esto, esa restricción (expresiones absolutas no permitidas con otro nodo de contexto que la raíz) es específica para la implementación de su motor XPath. –

+0

@ user357812 ¿hay alguna manera de consultar qué motor está usando una implementación particular de XPath? – jxramos

Cuestiones relacionadas