将十六进制值转换为Python中的XML元素值
我正在尝试使用 xml.etree.ElementTree
来生成一个 XML 树。一个子元素需要存储一个 32 字节的随机数,格式是十六进制。当我试着像这样给这个元素赋值 random_num.text = randomnumber()
时,出现了下面的错误:
TypeError: cannot serialize
有没有办法把这个十六进制的值赋给子元素 random_num
呢?
我使用的 Python 版本是 3.4。
而 random_number()
是用来生成随机数并转换成十六进制的函数。
任何帮助都非常感谢。
这是我想要修复的代码片段。我没有粘贴整个 XML 元素树的部分。
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")
1 个回答
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)