Python – ElementTree- cannot use absolute path on element

Question:

I’m getting this error in ElementTree when I try to run the code below:

SyntaxError: cannot use absolute path on element

My XML document looks like this:

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

Code:

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")

I’m on Python 2.6 on Mac. Am I using Xpath syntax wrong?

Basically I want to show every Script elements name attribute if it contains a StepText element with certain text.

Asked By: Greg

||

Answers:

Turns out I needed to say target.findall(".//StepText"). I guess anything without the ‘.’ is considered an absolute path?

Updated working code:

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
Answered By: Greg
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.