-2

我正在尝试从具有以下结构的字典中的值创建一个 XML 字符串。从根到字符串的键数(字典深度)是不确定的,范围从 1 到 ?。

'modes': {   'P': {   'S': {  u'01': u'Some Text A.',
                              u'02': u'Some Text B.',
                              u'03': u'Some Text C.',
                              u'04': u'Some Text D.',
                              u'05': u'Some Text E.',
                              u'06': u'Some Text F.'},
                     'U': {   u'01': u'Some Text G.',
                              u'02': u'Some Text H.'}},
            'R': {   'S': {   u'01': u'Some Text I.',
                              u'02': u'Some Text J.',
                              u'03': u'Some Text K.',
                              u'04': u'Some Text M.',
                              u'05': u'LSome Text N.'},
                     'U': {   u'01': u'Some Text O.',
                              u'02': u'Some Text P.',
                              u'03': u'Some Text Q.'}}}

我追求的输出示例是:

<modes>
  <property P>
    <property S>
      <text>
        <order>'01'</order>
        <string>'Some Text A.'</string>
      </text>
      <text>
        <order>'02'</order>
        <string>'Some Text B.'</string>
      </text>
      ...
    </property S>

    <property U>
      <text>
        <order>'01'</order>
        <string>'Some Text G.'</string>
      </text>
      <text>
        <order>'02'</order>
        <string>'Some Text H.'</string>
      </text>    
    </property U>
  </property P>

  <property R>
      <property S>
      <text>
        <order>'01'</order>
        <string>'Some Text I.'</string>
      </text>
      <text>
        <order>'02'</order>
        <string>'Some Text J.'</string>
      </text>
      ...
    </property S>

    <property U>
      <text>
        <order>'01'</order>
        <string>'Some Text O.'</string>
      </text>
      <text>
        <order>'02'</order>
        <string>'Some Text P.'</string>
      </text>    
      ...
    </property U>
  </property R>
</modes>

我对如何迭代结构更感兴趣,以便我可以将孩子放在正确的父母中,而不是作为 XML 的确切输出。任何关于可能改变数据结构的建议也将不胜感激,因为我觉得我已经把自己画到了一个角落!谢谢朱利安

4

2 回答 2

1

编写一个函数,该函数将采用当前结构以及要添加子节点的节点。当您在结构中遇到递归时,使用新节点和子结构递归函数。

于 2012-07-31T04:16:51.580 回答
1

我发现他们的方法是使用递归函数,如果字典 [key] 不是字典,则打印键、值,否则打印递归调用

def _dict_to_xml(dictionary):
    returnlist = []
    for key in dictionary:
        if isinstance(dictionary[key],dict):
            returnlist.append(r'<node name="{name}">'.format(name=key))
            returnlist.append(_dict_to_xml(dictionary[key]))
            returnlist.append(r'</node>')
        else:
            returnlist.append(r'<order>{key}</order>'.format(key=key))
            returnlist.append(r'<string>{value}</string>'.format(value = dictionary[key]))
    return '\n'.join(returnlist)


def dict_to_xml(dictionary):
    return '<?xml version="1.0"?>\n'+_dict_to_xml(dictionary)+'</xml>'
于 2012-07-31T04:33:45.020 回答