python elementtree xpath,Python-ElementTree-无法在元素上使用绝对路径

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:

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.

解决方案

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

XPath是一种用于在XML文档中定位元素的语法。在Python中,我们可以使用ElementTree模块来解析和操作XML文档,并使用XPath语法来定位和选择XML元素ElementTree模块提供了Element类,它代表了XML文档中的元素。我们可以通过调用Element类的find()方法来使用XPath。以下是一些常用的XPath语法: 1. 选择元素使用路径来选择元素。例如,"/bookstore/book"将选择位于根元素下的bookstore元素中的所有book元素。 2. 属性匹配:使用"@"符号来匹配元素的属性。例如,"/bookstore/book[@category='Children']"将选择category属性为Children的book元素。 3. 文本内容:使用"text()"函数来选择元素的文本内容。例如,"/bookstore/book[price<10]/title/text()"将选择价格小于10的书籍的标题。 4. 选择多个路径:使用"|"符号来选择多个路径。例如,"/bookstore/book/title | /bookstore/book/price"将选择book元素下的所有title和price元素。 5. 通配符选择:使用"*"符号来选择任意元素。例如,"//book"将选择文档中所有book元素,不论其层级。 ElementTree模块的XPath支持较为完整,可以使用较复杂的路径表达式和函数来进行选择和筛选。我们还可以使用findall()方法来选择多个元素,或者使用iter()方法来迭代地获取元素。 总而言之,XPath是一种强大而灵活的语法,可用于在PythonElementTree模块中定位和选择XML文档中的元素。通过使用XPath,我们能够更方便地处理和操作XML数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值