2013-04-15 106 views
0

我有一个xml数据。解析Python中的XML

<rentals type="array"> 
    <rental> 
    <account-id type="integer">130</account-id> 
    <created-at type="datetime">2011-08-26T23:27:13Z</created-at> 
    <description>1 - 1 br apt, walk-up - </description> 
    <id type="integer">218</id> 
    <name>Apt.1</name> 
    <notes nil="true"/> 
    <position type="integer">1</position> 
    <updated-at type="datetime">2011-12-06T09:00:58Z</updated-at> 
    </rental> 
    <rental> 
    <account-id type="integer">130</account-id> 
    <created-at type="datetime">2011-08-22T03:06:49Z</created-at> 
    <description>2 - Alcove Studio, walk-up, remote 3</description> 
    <id type="integer">210</id> 
    <name>Apt.2</name> 
    <notes nil="true"/> 
    <position type="integer">2</position> 
    <updated-at type="datetime">2012-09-26T21:37:20Z</updated-at> 
    </rental> 

</rentals> 

我用Pyxml2obj Python库解析到Python字典。采用XMLin

我去喜欢这样的反应。

{u'rental': {u'Apt.19': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'19 - big, spot lights studio', u'notes': {u'nil': u'true'}, u'updated-at': {'content': u'2013-04-11T18:03:24Z', u'type': u'datetime'}, u'created-at': {'content': u'2013-01-19T02:07:02Z', u'type': u'datetime'}, u'position': {'content': u'11', u'type': u'integer'}, u'id': {'content': u'1303', u'type': u'integer'}}, u'Apt.20': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'20 - same as 19', u'notes': {u'nil': u'true'}, u'updated-at': {'content': u'2013-04-14T23:19:58Z', u'type': u'datetime'}, u'created-at': {'content': u'2013-01-19T02:07:23Z', u'type': u'datetime'}, u'position': {'content': u'12', u'type': u'integer'}, u'id': {'content': u'1304', u'type': u'integer'}}, u'Apt.8': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'8 - studio, walk-up', u'notes': {u'nil': u'true'}, u'updated-at': {'content': u'2013-04-08T13:18:07Z', u'type': u'datetime'}, u'created-at': {'content': u'2011-08-27T01:25:36Z', u'type': u'datetime'}, u'position': {'content': u'5', u'type': u'integer'}, u'id': {'content': u'222', u'type': u'integer'}}, u'Apt.10': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'10 - semi luxury studio, elevator', u'notes': {u'nil': u'true'}, u'updated-at': {'content': u'2013-04-08T13:40:52Z', u'type': u'datetime'}, u'created-at': {'content': u'2011-09-01T15:02:21Z', u'type': u'datetime'}, u'position': {'content': u'6', u'type': u'integer'}, u'id': {'content': u'226', u'type': u'integer'}}, u'Apt.7': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'7 - studio, remote', u'notes': {u'nil': u'true'}, u'updated-at': {'content': u'2013-04-07T20:40:58Z', u'type': u'datetime'}, u'created-at': {'content': u'2011-08-27T01:25:00Z', u'type': u'datetime'}, u'position': {'content': u'4', u'type': u'integer'}, u'id': {'content': u'221', u'type': u'integer'}}, u'Apt.5': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'5 - huge studio', u'notes': {u'nil': u'true'}, u'updated-at': {'content': u'2013-04-07T19:24:30Z', u'type': u'datetime'}, u'created-at': {'content': u'2011-08-27T01:23:56Z', u'type': u'datetime'}, u'position': {'content': u'3', u'type': u'integer'}, u'id': {'content': u'219', u'type': u'integer'}}, u'Apt.2': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'2 - Alcove Studio, walk-up, remote 3', u'notes': {u'nil': u'true'}, u'updated-at': {'content': u'2012-09-26T21:37:20Z', u'type': u'datetime'}, u'created-at': {'content': u'2011-08-22T03:06:49Z', u'type': u'datetime'}, u'position': {'content': u'2', u'type': u'integer'}, u'id': {'content': u'210', u'type': u'integer'}}, u'Apt.15': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'15 - alcove, walk-up', u'notes': {u'nil': u'true'}, u'updated-at': {'content': u'2013-04-14T22:39:41Z', u'type': u'datetime'}, u'created-at': {'content': u'2011-11-04T20:13:49Z', u'type': u'datetime'}, u'position': {'content': u'9', u'type': u'integer'}, u'id': {'content': u'344', u'type': u'integer'}}, u'Apt.16': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'16 - Studio', u'notes': {u'nil': u'true'}, u'updated-at': {'content': u'2013-04-09T23:12:45Z', u'type': u'datetime'}, u'created-at': {'content': u'2011-11-29T06:12:33Z', u'type': u'datetime'}, u'position': {'content': u'10', u'type': u'integer'}, u'id': {'content': u'378', u'type': u'integer'}}, u'Apt.1': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'1 - 1 br apt, walk-up - ', u'notes': {u'nil': u'true'}, u'updated-at': {'content': u'2011-12-06T09:00:58Z', u'type': u'datetime'}, u'created-at': {'content': u'2011-08-26T23:27:13Z', u'type': u'datetime'}, u'position': {'content': u'1', u'type': u'integer'}, u'id': {'content': u'218', u'type': u'integer'}}, u'Apt.25': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'studio with back yard', u'notes': {}, u'updated-at': {'content': u'2013-04-14T20:32:07Z', u'type': u'datetime'}, u'created-at': {'content': u'2013-04-01T13:02:59Z', u'type': u'datetime'}, u'position': {'content': u'17', u'type': u'integer'}, u'id': {'content': u'2683', u'type': u'integer'}}, u'Apt.24': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'24 - studio', u'notes': {}, u'updated-at': {'content': u'2013-04-12T16:18:23Z', u'type': u'datetime'}, u'created-at': {'content': u'2013-03-22T21:15:29Z', u'type': u'datetime'}, u'position': {'content': u'16', u'type': u'integer'}, u'id': {'content': u'1910', u'type': u'integer'}}, u'Apt.23': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'23 - alcove studio', u'notes': {u'nil': u'true'}, u'updated-at': {'content': u'2013-04-15T01:01:13Z', u'type': u'datetime'}, u'created-at': {'content': u'2013-02-02T19:06:33Z', u'type': u'datetime'}, u'position': {'content': u'15', u'type': u'integer'}, u'id': {'content': u'1351', u'type': u'integer'}}, u'Apt.11': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'11 - Split Studio, remote', u'notes': {u'nil': u'true'}, u'updated-at': {'content': u'2013-04-11T20:02:19Z', u'type': u'datetime'}, u'created-at': {'content': u'2011-10-07T14:55:38Z', u'type': u'datetime'}, u'position': {'content': u'7', u'type': u'integer'}, u'id': {'content': u'308', u'type': u'integer'}}, u'Apt.21': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'21 - walk up, alcove studio', u'notes': {u'nil': u'true'}, u'updated-at': {'content': u'2013-04-14T06:05:49Z', u'type': u'datetime'}, u'created-at': {'content': u'2013-02-02T19:05:03Z', u'type': u'datetime'}, u'position': {'content': u'13', u'type': u'integer'}, u'id': {'content': u'1349', u'type': u'integer'}}, u'Apt.22': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'22 - 1br big', u'notes': {u'nil': u'true'}, u'updated-at': {'content': u'2013-04-10T13:45:47Z', u'type': u'datetime'}, u'created-at': {'content': u'2013-02-02T19:06:08Z', u'type': u'datetime'}, u'position': {'content': u'14', u'type': u'integer'}, u'id': {'content': u'1350', u'type': u'integer'}}, u'Apt.14': {u'account-id': {'content': u'130', u'type': u'integer'}, u'description': u'14 - 1 BR walk-up', u'notes': {}, u'updated-at': {'content': u'2013-04-12T17:31:31Z', u'type': u'datetime'}, u'created-at': {'content': u'2011-11-01T03:37:15Z', u'type': u'datetime'}, u'position': {'content': u'8', u'type': u'integer'}, u'id': {'content': u'339', u'type': u'integer'}}}, u'type': u'array'} 

现在我想遍历这个字典来得到这样的个人数据,

for rentall in getdictobj.items(): 
    rentall.name 

我收到错误

AttributeError: 'tuple' object has no attribute 'name' 

我知道,对象有没有属性名但在Xml名称中明确提到。

请帮我弄清楚什么可能我做错了这里

+0

你错过colsing标签的最后租金 – user1451340

+0

,一个是我写的错误,因为XML是太大 – burning

+0

你是如何得到钥匙Apt.19,内容响应文件?这些密钥不可用作XML中的节点。你可以尝试使用xml.dom.minidom解析器,它将很容易解析和获取所有名称节点。 – kvivek

回答

0

Dict.items返回一个元组列表(名称值),其中名称是字典索引,可以是任何东西,是不是一个可变目的。你应该说的名字,值.....

例子:

for i, value in d.items(): 
    print i, value 

或者,我们也可以将字典内的元组或列表,以便:

T = tuple (d.items()) 
T = list (d.items()) 

,现在你可以可以遍历元组/列表而不是字典。

+0

请详细些 – burning

+0

'd = {“a”是非常大,因此从顶部贴只有两种出租:1,“B”:2,“C ':3}'then'for k,v in d.items()'在每次迭代中将会有'k'中的字母(键)和'v'中的数字(值)。 –

0

有一个替代的方式来获得所有的名字节点。

from xml.dom import minidom 
xmldoc = minidom.parse(r'C:\Users\kvivek\Desktop\rentals.xml') 
nameNodes = xmldoc.getElementsByTagName('name') 
for nameNode in nameNodes: 
    print namenode.toxml()