0

我有一个 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 dict 。使用 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'}

现在我正在尝试遍历这个 dict 以获取单个数据,例如,

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

我收到错误

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

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

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

4

2 回答 2

0

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

例子:

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

或者,您可以将 dict 转换为元组或列表,这样:

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

现在您可以迭代元组/列表而不是字典。

于 2013-04-15T05:26:28.487 回答
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()
于 2013-04-15T06:50:07.837 回答