4

与えられた:

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

key 属性 = "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

ここの回答に基づいて、XPath セレクター機能は、 @cdemers が言ったように、Python 2.7 に同梱されているバージョン 1.3 まで ElementTree に実装されていませんでした。

于 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 に答える