所以,这是我的XML树:
<?xml version="1.0"?>
<api>
<query>
<normalized>
<n from="Brain_cancer" to="Brain cancer" />
</normalized>
<redirects>
<r from="Brain cancer" to="Brain tumor"
/>
</redirects>
<pages>
<page pageid="37284" ns="0" title="Brain tumor">
<revisions>
<rev revid="412658600" parentid="412501243" user="Andycjp" userid="55014" timestamp="2011-02-08T03:35:27Z" size="59870" sha1="fe1ff25c27ebc86572aa4be8201cb813e1bf3d32" comment="/* Psychological and behavioral consequences */" contentformat="text/x-wiki" contentmodel="wikitext" xml:space="preserve">
</rev>
</revisions>
</page>
</pages>
</query>
<warnings>
<revisions xml:space="preserve">
</revisions>
<result xml:space="preserve">
</result>
</warnings>
<query-continue>
<revisions rvcontinue="456175380"
/>
</query-continue>
</api>
所以,你可以看到,“revisions”元素出现在两个不同的位置,在不同的级别。我的目标是达到属性“rvcontinue”(谁的路径是api / query-continue / revisions)来将它的值复制到一个新变量中。这可能是因为我只是没有把它弄好,但是elementTree和xpath到目前为止还不起作用。
这是我到目前为止所做的,但它没有在哪里
import xml.etree.ElementTree as ET
tree = ET.parse('Brain_tumor_5.xml')
for elem in tree.getiterator():
if elem.tag=='{http://www.namespace.co.uk}query-continue':
output = {}
for elem1 in list(elem):
if elem1.tag=='{http://www.namespace.co.uk}revisions':
output['rvcontinue']=elem1.text
print output
p = tree.find("./api/query-continue/revisions[@rvcontinue=]")
q = p.attrib
print q
答案 0 :(得分:1)
我也主要使用lxml,所以我不知道etree是什么,但它出现了 从树中查找不起作用,但从根查找确实有效:
>>> tree.getroot().find( 'query-continue/revisions[@rvcontinue]' ).attrib['rvcontinue']
'456175380'
另外:我不知道这只是一个错字,但是:
p = tree.find("./api/query-continue/revisions[@rvcontinue=]")
将给出一个SyntaxError:无效谓词
添加注意:tree.find( 'api' )
似乎返回无,
但tree.find( '.' )
会返回<Element 'api' at 0x1004e5f10
&gt;
所以tree.find( './query-continue/revisions[@rvcontinue]' )
也可以。
答案 1 :(得分:0)
这并不直接回答您的问题。但是,我会使用lxml.etree
(据说提供相同的ElementTree
接口)和以下代码:
>>> import lxml.etree
>>> doc = lxml.etree.parse('doc.xml')
>>> node = doc.xpath('/api/query-continue/revisions[@rvcontinue]')
>>> node[0].attrib['rvcontinue']
'456175380'
尝试使用xml.etree.ElementTree
,但似乎无法正常工作。