如何选择具有特定属性值的XML元素数据?
给定的内容:
<foo>
<bar key="true">text1</bar>
<bar key="false">text2</bar>
<bar key="true">text3</bar>
<bar key="true">text4</bar>
</foo>
我想获取一个条形元素的文本,这个元素的 key 属性等于 "false"。
我的应用程序是在 GAE 上运行的 Python 2.5.5。这个 XML 不是标准的 XML 格式,但我可以把它加载为 ElementTree,然后正常获取数据。
代码示例:
result = urllib2.urlopen(url).read()
xml = ElementTree.fromstring(result)
str = xml.find("./bar").attrib['key']
这是获取第一个值的代码。我尝试了各种我认为应该有效的 xpath 查询,但显然我的语法有问题。
更新:
str = xml.findtext("./bar[@key='false']")
出现错误:
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/xml/etree/ElementPath.py", line 93, in __init__
"expected path separator (%s)" % (op or tag)
SyntaxError: expected path separator ([)
4 个回答
2
这个XPath会选择那些key
属性值为false
的bar
节点:
/foo/bar[@key='false']
如果当前的上下文节点是foo
节点,那么这个也可以用:
./bar[@key='false']
3
我可能错了,但我觉得在Python 2.5.5中,"./bar[@key='false']
"这种写法是行不通的(至少在它自带的ElementTree里是这样)。我在Python 2.6.5中也遇到了同样的问题,不过在Python 2.7.1中就可以用了。我想你可能需要使用其他的库,或者试试“实验性”的GAE和Python 2.7。