我的XML文件是這樣的:將XML文件轉換爲鍵值結構的最佳算法是什麼?
<root>
<key0>value</key0>
<key1>value</key1>
<key2>value</key2>
</root>
人們很容易把這樣的文件轉換成鍵值結構。讓我們展示的結果在Python字典,例如:
{'key0': 'value', 'key1': 'value', 'key2': 'value'}
現在他們添加嵌套元素:
<root>
<key0>value</key0>
<key1>value</key1>
<key2>value</key2>
<key3>
<sth0>value</sth0>
<sth1>value</sth1>
</key3>
</root>
仍然很容易:
{'key0': 'value', 'key1': 'value', 'key2': 'value', 'key3/sth0': 'value', 'key3/sth1': 'value'}
我想你了問題的實質。那麼這個怎麼樣?
<root>
<key0>value</key0>
<key1>value</key1>
<key1>
<inner>value</inner>
</key1>
<key2>value</key2>
<key3>
<sth0>value</sth0>
<sth1>value</sth1>
</key3>
<key3>
<sth0>different value</sth0>
<sth1>different value</sth1>
</key3>
<key3>
<sth0>blah blah</sth0>
<sth1>blah blah</sth1>
</key3>
</root>
當然,我可以拿出一段時間思考後的東西,但東西告訴我我就滿足了越來越多的困難。所以問題是:是否有一種複雜的算法將類似簡單的XML文件中的值序列化爲鍵值形式?它必須是確定性的可序列化和不可序列化的,並且不會丟失任何值。元素的順序並不重要(例子中的Python dict不是隨機的選擇,它實際上是我試圖獲得的)。
我知道XML可能非常複雜(名稱空間,屬性等等),但事實並非如此。我需要正確解決的唯一問題是呈現的嵌套值和相同鍵的相關多重性。
爲什麼不使用XML數據,並使用XPath查詢數據?有很多預先構建的庫已經實現了這一點。這個http://lxml.de甚至還有「物化」,這聽起來接近你想要的。我不會像你那樣命名子元素。我會將具有子元素的元素放入集合中。 – Adrian
我知道將這些XML轉換爲'對象'或'文檔'將是最好的,但我現在無法做到這一點。這是因爲我有很多遺留代碼專門用於鍵值結構。我不得不重寫整個生態系統,現在這是不可能的。我需要一箇中間步驟。 –
你可以在每個名字的末尾附加一些獨特的東西。像成爲Key0_unique,其中唯一是升序號碼或GUID。 –
Adrian