2014-03-04 31 views
1

我現在的目標是將代碼的輸出用作構建xml的數據。這裏有一個例子:如何將代碼的輸出插入xml標記佔位符(python)

from xml.etree.ElementTree import Element, SubElement, tostring 
x=9**2. 
xmlTemplate=""" 
<features> 
    <name>%(name)s</name> 
    <age>int(age)</age> 
    <dob>%(dob)s</dob> 
</features>""" 
data={'name':'Michael', 'age':='x','dob':'20/10/1925'} 

print xmlTemplate%data 

<features> 
    <name>Michael</name> 
    <age>=x</age> 
    <dob>20/10/1925</dob> 
</features> 

你可以看到,而不是使用變量「X」作爲XML積累輸入的輸出,它只是用字母x(串)。

關於如何在年齡佔位符中插入'x'輸出的任何建議?提前致謝。

+0

您的代碼有語法錯誤。你的意思是'年齡':'x'?那些'='很奇怪...... –

回答

1

您應該使用str.format()函數,將{}放在需要動態內容的位置。在你的榜樣,那就是:

x=9**2 

xmlTemplate=""" 
<features> 
<name>{name}</name> 
<age>{age}</age> 
<dob>{dob}</dob> 
</features>""".format(name='Michael', age=x, dob='20/10/1925') 
+0

感謝您的回覆。我收到以下錯誤消息:NameError:名稱'Michael'未定義。 – Tiger1

+0

@ Tiger1對不起,我錯過了周圍的報價。我編輯了答案以反映正確的格式。 – jknupp

+0

程序有語法錯誤:程序中有錯誤,語法無效。大括號我想。 – Tiger1

1

你有幾個錯別字....第一,%int(age)無效。你需要%(age)d。那麼,在您的數據中,您有age:'x'(我認爲?),'x'在引號中。你只是想要變量,所以它應該是x。然後,它看起來是這樣的:

x = 9**2 

xmlTemplate=""" 
<features> 
    <name>%(name)s</name> 
    <age>%(age)d</age> 
    <dob>%(dob)s</dob> 
</features>""" 
data={'name':'Michael', 'age':x,'dob':'20/10/1925'} 

print xmlTemplate%data 

從特例的format方法也做到這一點(你也可以把它作爲xmlTemplate.format(**data)如果您使用的)一個好辦法,因爲這樣你正在使用的舊式的方法是不尋常的,但完全有效,並且如果您修復這些錯別字,則工作正常...

+0

感謝您的解決方案和簡短但很好的解釋。輸出正是我想要的。 – Tiger1