xml字符串附有b&#39; <xml_string>&#39;使用dicttoxml模块</xml_string>从字典生成时

时间:2014-11-19 14:48:32

标签: python xml python-3.x

我使用dicttoxml模块将字典转换为xml。

代码:

cfg_dict = { 'mobile' :
                { 'checkBox_OS' :
                  { 'status' : 'None', 
                    'radioButton_Andriod' :
                      { 'status' : 'None',
                        'comboBox_Andriod_Brands' : 'LG'},
                    'radioButton_Windows' :
                      { 'status' : 'None',
                        'comboBox_Windows_Brands' : 'Nokia'},
                    'radioButton_Others' :
                      { 'status' : 'None',
                        'comboBox_Others_Brands' : 'Apple'}},
                  'checkBox_Screen_size' :
                    { 'status' : 'None',
                      'doubleSpinBox_Screen_size' : '5.0' }}
              }        

from dicttoxml import dicttoxml
xml = dicttoxml(self.cfg_dict)
print (xml)

输出:

b'<?xml version="1.0" encoding="UTF-8" ?><root><mobile type="dict"><checkBox_OS type="dict"><radioButton_Andriod type="dict"><status type="bool">false</status><comboBox_Andriod_Brands type="str">Sony</comboBox_Andriod_Brands></radioButton_Andriod><radioButton_Windows type="dict"><status type="bool">false</status><comboBox_Windows_Brands type="str">HTC</comboBox_Windows_Brands></radioButton_Windows><status type="bool">false</status><radioButton_Others type="dict"><status type="bool">false</status><comboBox_Others_Brands type="str">Apple</comboBox_Others_Brands></radioButton_Others></checkBox_OS><checkBox_Screen_size type="dict"><doubleSpinBox_Screen_size type="float">5.0</doubleSpinBox_Screen_size><status type="bool">false</status></checkBox_Screen_size></mobile></root>'

我不知道为什么附上b&#39; &#39 ;.如何在没有这个b&#39;&#39;?

的情况下生成xml字符串

使用此内容打开xml文件时,浏览器也会给出错误消息。

2 个答案:

答案 0 :(得分:4)

图书馆作者在这里。

看起来你正在使用Python 3.除非你指定了编码,否则Python 3会以二进制格式存储字符串。

继续使用示例代码,将xml从字节字符串转换为字符串,使用decode方法:

>>> xml_string = xml.decode('utf-8')
>>> print(xml_string)
<?xml version="1.0" encoding="UTF-8" ?><root><mobile type="dict"><checkBox_OS type="dict"><radioButton_Windows type="dict"><status type="str">None</status><comboBox_Windows_Brands type="str">Nokia</comboBox_Windows_Brands></radioButton_Windows><radioButton_Others type="dict"><comboBox_Others_Brands type="str">Apple</comboBox_Others_Brands><status type="str">None</status></radioButton_Others><status type="str">None</status><radioButton_Andriod type="dict"><comboBox_Andriod_Brands type="str">LG</comboBox_Andriod_Brands><status type="str">None</status></radioButton_Andriod></checkBox_OS><checkBox_Screen_size type="dict"><status type="str">None</status><doubleSpinBox_Screen_size type="str">5.0</doubleSpinBox_Screen_size></checkBox_Screen_size></mobile></root>

干杯!

答案 1 :(得分:3)

这是Python 3中非Unicode的字符串的正常表示。在Python shell中尝试:

>>> type("foo")
<class 'str'>
>>> type(b"foo")
<class 'bytes'>
>>> type("Rübe")
<class 'str'>
>>> type(b"Rübe")
  File "<stdin>", line 1
SyntaxError: bytes can only contain ASCII literal characters.

所以一切都好。你没有问题。

另请参阅str vs bytes

修改

了解编码和解码的工作原理。

>>> s = "Rübe"
>>> e = s.encode("UTF-8")
>>> print(e)
b'R\xc3\xbcbe'
>>> type(e)
<class 'bytes'>
>>> d = e.decode("UTF-8")
>>> d
'Rübe'

因此,只需使用my_byte_string.decode(my_encoding),其中my_encoding可能是"UTF-8"