我有一个要解析的xml文件。我使用 python 的 minidom 解析器来做到这一点。我必须在解析后向特定元素添加一个属性。现在,我想把文件写回来。我做不到。
下面是我为此获得的错误跟踪。我今天安装了numpy 1.8(win 32 python 2.7)版本。但是,我以前从未尝试过编写xml文件。你能帮忙吗?
下面是代码片段:
xmlfile=open(xmlFile,'r')
xmldoc = minidom.parse(xmlFile)
tElements = xmldoc.getElementsByTagName("TEA")
for t in tElements:
if(t.childNodes):
print t.nodeType
dataList = t.childNodes[0].data
for data, csvData in product(dataList, clusterDataList):
if(data == csvData[1]):
t.setAttribute("cluster",csvData[0])
xmlfile.close()
fileWriter=open("sujatha_new.xml",'w')
xmldoc.writexml(fileWriter)
fileWriter.close()
以下是例外情况:
Traceback (most recent call last):
File "C:Usersw44ylqrlworkspacePythonTestTXMLConverter.py", line 215, in <module>
addClusterInfo('..\T\preprocessed_For_Clustering\outputs\sujatha-new.csv', '..\T\xml\sujatha.xml')
File "C:Usersw44ylqrlworkspacePythonTestTXMLConverter.py", line 48, in addClusterInfo
xmldoc.writexml(fileWriter)
File "C:Python27Libxmldomminidom.py", line 1752, in writexml
node.writexml(writer, indent, addindent, newl)
File "C:Python27Libxmldomminidom.py", line 817, in writexml
node.writexml(writer, indent+addindent, addindent, newl)
File "C:Python27Libxmldomminidom.py", line 817, in writexml
node.writexml(writer, indent+addindent, addindent, newl)
File "C:Python27Libxmldomminidom.py", line 817, in writexml
node.writexml(writer, indent+addindent, addindent, newl)
File "C:Python27Libxmldomminidom.py", line 817, in writexml
node.writexml(writer, indent+addindent, addindent, newl)
File "C:Python27Libxmldomminidom.py", line 817, in writexml
node.writexml(writer, indent+addindent, addindent, newl)
File "C:Python27Libxmldomminidom.py", line 807, in writexml
_write_data(writer, attrs[a_name].value)
File "C:Python27Libxmldomminidom.py", line 296, in _write_data
data = data.replace("&", "&").replace("<", "<").
AttributeError: 'numpy.int64' object has no attribute 'replace'
没有一个python XML实现允许你序列化非字符串表示,尽管其中一些会允许你分配它们,如果你想滥用etree等作为树状数据结构。有些(如 lxml)甚至不会让你分配它们。只需将其设为字符串:
t.setAttribute("cluster",str(csvData[0]))
它会起作用。如果还要反序列化这些值,则需要在加载后将值转换回 int。
尝试将非字符串类型添加到 DOM 中时发生错误。
最有可能的是,您正在尝试添加(numpy)整数作为属性名称/值,您正在尝试向元素添加整数内容。
您可以通过将所有整数转换为字符串来解决此问题,使用 str()
函数之类的东西。
这也可能发生在其他类型上,例如numpy.float64,但它绝不仅限于numpy类型,它会影响所有非字符串类型。