Python中的XML元素值的十六进制值

时间:2014-08-14 00:56:55

标签: python xml hex

我正在尝试使用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")

1 个答案:

答案 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)