我在Python 3中使用xml.etree.ElementTree
创建了一个简单的XML元素。
import xml.etree.ElementTree as ElementTree
person = ElementTree.Element("Person", Name="John", Age=18)
我可以使用Element.get()
从我的元素中访问各个属性而不会出现任何问题。
name = person.get("Name")
age = person.get("Age")
print(name + " is " + str(age) + " years old.")
# output: "John is 18 years old"
但是,如果我尝试将我的元素转换为.tostring()
的字符串,我会收到错误" TypeError:类型' int'的参数是不可迭代的"。
print(ElementTree.tostring(person)) # TypeError
为什么我不能在.tostring()
上使用带有整数属性的xml.etree.ElementTree.Element
?
完整代码:
import xml.etree.ElementTree as ElementTree
person = ElementTree.Element("Person", Name="John", Age=18)
print(ElementTree.tostring(person)) # TypeError
完整追溯:
Traceback (most recent call last):
File "C:\Users\svascellar\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 1079, in _escape_attrib
if "&" in text:
TypeError: argument of type 'int' is not iterable
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/svascellar/.PyCharmCE2017.3/config/scratches/scratch_13.py", line 3, in <module>
print(ElementTree.tostring(person))
File "C:\Users\svascellar\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 1135, in tostring
short_empty_elements=short_empty_elements)
File "C:\Users\svascellar\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 776, in write
short_empty_elements=short_empty_elements)
File "C:\Users\svascellar\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 933, in _serialize_xml
v = _escape_attrib(v)
File "C:\Users\svascellar\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 1102, in _escape_attrib
_raise_serialization_error(text)
File "C:\Users\svascellar\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 1057, in _raise_serialization_error
"cannot serialize %r (type %s)" % (text, type(text).__name__)
TypeError: cannot serialize 18 (type int)
答案 0 :(得分:4)
即使Age
是一个数值,xml属性值也应该是带引号的字符串:
person = ElementTree.Element("Person", Name="John", Age="18")
或者,如果数据存储为变量,请将其转换为str()
age = 18
person = ElementTree.Element("Person", Name="John", Age=str(age))