2010-01-22 62 views
1

我正在使用xml文件來存儲軟件的配置。使用lxml在Python中存儲系統路徑的XML

一個theese配置會是什麼樣

> set_value = "c:\\test\\3 tests\\test" 

我可以存儲它的系統路徑使用:

> setting = etree.SubElement(settings, 
> "setting", name=tmp_set_name, type = 
> set_type , value= set_value) 

如果我使用

doc.write(output_file, method='xml',encoding = 'utf-8', compression=0) 

的文件將是:

<設定類型= 「STR」 名稱= 「mypath中」 值= 「C:\測試\ 3測試\測試」/>

現在我與調用etree.parse方法再次閱讀

我獲得etree有一個字符串值子對象,但該字符串 包含

\ 3

字符,如果我嘗試使用它再次寫XML,它被解釋!!!!!所以我不能再使用它作爲路徑 也許我只是缺少一個簡單的字符串操作,但我不能看到它=) 你會如何以聰明的方式解決它?

這是一個例子,但是最好的方法是什麼?您認爲將路徑存儲在xml中並使用lxml解析它們是什麼?

謝謝!

+0

這只是反斜槓的問題嗎?如果是這樣,只需使用正斜槓 - 它們也可以在Windows上正常工作。 – 2010-01-22 09:21:59

回答

1

現在我與 調用etree.parse方法

我獲得了 字符串值的etree子對象看了一遍,但該字符串包含 的

\3 

字符,如果我試着用它來 再次寫入xml它會被 解釋!!!!!

我剛剛試過,並沒有得到「解釋」。解析後返回的元素屬性爲:

{'type': 'str', 'name': 'yowza!', 'value': 'c:\\test\\3 tests\\test'} 

因此,正如您所看到的,它的工作原理與您預期的一樣。如果你真的有這個問題,你正在做別的事情,而不是你說的。向我們展示真實的代碼,或者在展示問題並使用它的地方製作一個小例子代碼。

+0

謝謝,您的測試非常有用。 我使用我從xml退出的值在設置對象內創建變量。問題出現在代碼如下的代碼段中: exec('self。%s =%s'%(k,v)) 其中k是屬性名稱,v是值 %s在解釋。 當我從對象中讀取創建xml時,我讀取了沒有雙精度的字符串\\ 我錯誤地認爲問題出現在lxml打印中,但它是之前的段落。 – nios 2010-01-22 10:31:52

+1

爲什麼在天堂名稱中使用exec? setattr(self,k,v) – 2010-01-22 10:58:41

+1

+1親愛的主,千萬別用exec! – bobince 2010-01-22 13:06:37