我正在尝试使用xml.etree.ElementTree
生成XML树。子元素保存十六进制的32字节随机数的值。当我尝试将随机数分配给random_num.text = randomnumber()
这样的元素时,会抛出以下错误,
TypeError: cannot serialize
有没有办法将十六进制值分配给子random_num
?
Python版本是3.4
而random_number()
是生成随机数并转换为十六进制的那个。
感谢任何帮助。
这是我要修复的代码段。我没有粘贴整个XML Element树部分。
import binascii
import os
import xml.et.ElementTree
def random_number():
r = os.urandom(32)
b = binascii.hexlify(r)
bb = base64.b64encode(b)
return bb
Number = ET.Element("Number")
random_num = ET.SubElement(Number, "Random Number")
random_num.text = random_number()
tree.write("somefile.xml", xml_declaration=True, encoding='utf-8', method="xml")
答案 0 :(得分:0)
我无法重现问题。您的random_number
功能正常。这是我更新xml文本属性的代码:
import xml.etree.ElementTree as ET
import os
import binascii
import base64
testxml = '''<?xml version="1.0"?>
<data>
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank updated="yes">5</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
<rank updated="yes">69</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/>
</country>
</data>'''
def random_number():
r = os.urandom(32)
b = binascii.hexlify(r)
bb = base64.b64encode(b)
return bb
et = ET.fromstring(testxml)
for rank in et.iter('rank'):
rank.text = random_number()
ET.dump(et)