2017-02-27 103 views
2

我有存儲在需要寫入到一個XML文件格式的字典格式的數據..爲什麼dict2xml在輸入字典中不保持相同的順序?

我想使用dict2xml模塊..

我看到達在詞典項目的順序是不在xml文件中維護。

我使用的字典輸入是OrderedDict()。

可能是什麼原因。除了可以使用dict2xml以外的其他更好的模塊?

例如..

$ ipython 
Python 3.5.1 (default, Oct 28 2016, 14:29:41) 
Type "copyright", "credits" or "license" for more information. 

IPython 5.2.2 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object', use 'object??' for extra details. 

In [1]: from collections import OrderedDict 

In [2]: myDict = OrderedDict() 

In [3]: myDict['simpleVal'] = 1 

In [4]: dictVal = OrderedDict() 

In [5]: dictVal['simpleVal1'] = 2 

In [6]: dictVal['listVal'] = ['a','b','c'] 

In [7]: myDict['dictVal'] = dictVal 

In [8]: myDict['listVal1'] = ['d','e','f','g'] 

In [9]: myDict 
Out[9]: 
OrderedDict([('simpleVal', 1), 
      ('dictVal', 
       OrderedDict([('simpleVal1', 2), ('listVal', ['a', 'b', 'c'])])), 
      ('listVal1', ['d', 'e', 'f', 'g'])]) 

In [10]: from dict2xml import dict2xml 

In [11]: dict2xml(myDict) 
Out[11]: '<dictVal>\n <listVal>a</listVal>\n <listVal>b</listVal>\n <listVal>c</listVal>\n <simpleVal1>2</simpleVal1>\n</dictVal>\n<listVal1>d</listVal1>\n<listVal1>e</listVal1>\n<listVal1>f</listVal1>\n<listVal1>g</listVal1>\n<simpleVal>1</simpleVal>' 

實際輸出,你可以看到的是:

<dictVal> 
    <listVal>a</listVal> 
    <listVal>b</listVal> 
    <listVal>c</listVal> 
    <simpleVal1>2</simpleVal1> 
</dictVal> 
<listVal1>d</listVal1> 
<listVal1>e</listVal1> 
<listVal1>f</listVal1> 
<listVal1>g</listVal1> 
<simpleVal>1</simpleVal> 

但按我的順序我已經給定輸出應該是

<simpleVal>1</simpleVal> 
<dictVal> 
    <simpleVal1>2</simpleVal1> 
    <listVal>a</listVal> 
    <listVal>b</listVal> 
    <listVal>c</listVal> 
</dictVal> 
<listVal1>d</listVal1> 
<listVal1>e</listVal1> 
<listVal1>f</listVal1> 
<listVal1>g</listVal1> 
+0

你可以更新你的信息:你的代碼,輸入,預期的輸出,實際輸出。謝謝。 –

+0

抱歉已更新查詢.. –

回答

1

問題是dict2xml在將它們轉換爲xml之前對它們進行排序。

我真的不知道爲什麼......我不知道這種行爲是否是任何文件。

code

def convert(self): 
    ... 
    if typ == 'mapping': 
     for key in sorted(data): <--- SORTING THE KEYS! 
      item = data[key] 
      children.append(Node(key, "", item, iterables_repeat_wrap=self.iterables_repeat_wrap)) 
相關問題