4

鉴于:

<foo>
 <bar key="true">text1</bar>
 <bar key="false">text2</bar>
 <bar key="true">text3</bar>
 <bar key="true">text4</bar>
</foo>

我想获取键属性 =“false”的 bar 元素的文本。

我的应用程序是 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

4 回答 4

3

我可能是错的,但我认为“ ./bar[@key='false']”符号在 Python 2.5.5 中不起作用(或者至少不适用于随附的 ElementTree)。我在 Python 2.6.5 中观察到了同样的问题,但它在 Python 2.7.1 中确实有效。我想您将不得不使用另一个库或尝试使用 Python 2.7 的“实验性”GAE。

于 2011-12-07T19:45:33.403 回答
2

此 XPath 将选择属性等于的bar节点:keyfalse

/foo/bar[@key='false']

如果当前上下文节点是foo节点,那么这也将起作用:

./bar[@key='false']
于 2011-01-01T15:55:42.167 回答
1

根据此处的答案,正如@cdemers 所说,XPath 选择器功能直到版本 1.3 才在 ElementTree 中实现,该版本随 Python 2.7一起提供。

于 2012-11-27T20:55:55.560 回答
0

您正在使用的“[@attrib]”仅在 ElementTree 1.3 中引入: http ://effbot.org/zone/element-xpath.htm

仅在 Python 2.7 中引入:

https://docs.python.org/2/library/xml.etree.elementtree.html

正如这里的其他人所提到的,您需要以不同的方式获取此属性或升级 Python 以使该代码正常工作。

于 2015-11-19T15:50:21.190 回答