Python - ElementTree- cannot use absolute path on element
28,958
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
Author by
Greg
I'm an avid programmer, web developer and electronics enthusiast. Here's my gift to Python hackers. And you can see everything I'm up to here.
Updated on December 20, 2020Comments
-
Greg over 3 years
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.
-
Admin about 13 yearsAny XPath expression starting with
/
or//
operator is an absolute expression. Besides this, that restriction (absolute expressions not allowed with other context node than root) is specific to your XPath engine implementation. -
jxramos over 7 years@user357812 is there a way to query which engine a particular XPath implementation is using?