1

このコードを使用してxmlファイルから属性を抽出したいxmlファイルは次のとおりです:

xml= "<graphics type='xxx' port=’0’ autoport='xxx' listen='0.0.0.0'>
  <listen type='address' address='0.0.0.0'/>
</graphics>"

コードは次のとおりです。

def xml_to_dict(xml):  
      d={}   
      if xmlk.text:
         d[xmlk.tag] = xmlk.text  
      else:
         d[xmlk.tag] = {}   
     children = xmlk.getchildren()   
     if children:
         d[xmlk.tag] = map(xml_to_dict, children)  
         return d

     xml_to_dict(xyz) Output: {'graphics': [{'listen': {}}]}

タグの代わりにdmlk、attribを試しましたが、役に立ちませんでした。誰かがこれを知っていますか

4

3 に答える 3

0

使用したい出力フォーマットが明確ではありません。コードに近づこうとする可能性が1つあります。

empty = lambda s: not (s and s.strip())

def xml_to_dict(root):
    assert empty(root.tail), 'tail is not supported'
    d = root.attrib
    assert root.tag not in d, 'tag and attribute name conflict'
    if len(root) > 0: # has children
       assert empty(root.text), 'text and chilren conflict'
       d[root.tag] = map(xml_to_dict, root)
    elif not empty(root.text):
       d[root.tag] = root.text
    return d

通常、元に戻すことはできません。

import pprint
import xml.etree.ElementTree as etree

xml = """<graphics type='xxx' port='0' autoport='xxx' listen='0.0.0.0'>
  <listen type='address' address='0.0.0.0'/>
 <value>1</value>
 <blank/>
</graphics>
"""
pprint.pprint(xml_to_dict(etree.fromstring(xml)))

出力

{'autoport': 'xxx',
 'graphics': [{'address': '0.0.0.0', 'type': 'address'}, {'value': '1'}, {}],
 'listen': '0.0.0.0',
 'port': '0',
 'type': 'xxx'}

注:<listen>タグ名はリストに含まれておらず、graphicsリスト<blank/>に含ま{}れています。

于 2012-09-08T01:24:05.593 に答える
0
from lxml import etree
dict(etree.fromstring(xml).items())

出力

{'autoport': 'xxx', 'type': 'xxx', 'port': '0', 'listen': '0.0.0.0'}
于 2012-09-07T23:19:00.620 に答える
0

lxmlをお勧めしますが、次のコードはlxmlまたはElementTreeのいずれかで機能します

また、苦痛を少し微調整する必要があります。

from xml.etree import ElementTree as etree
tree = etree.fromstring(xml)

def xml_to_dict(tree):  
  d={}   
  if tree.text:
     d[tree.tag] = tree.text  
  elif len(tree) < 0:
     d[tree.tag] = {}   
  else:   
     d[tree.tag] = map(xml_to_dict, tree)  
 return d

それはあなたが求めていたものをあなたに与えます。

于 2012-09-07T23:33:21.420 に答える