将十六进制值转换为Python中的XML元素值

-1 投票
1 回答
1131 浏览
提问于 2025-04-18 17:14

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

撰写回答