我目前正在尝试从CSV文件构建XML文件。目前,我的代码将CSV文件读取到数据,并开始从存储在CSV中的数据创建XML。Python XML'TypeError:必须是xml.etree.ElementTree.Element,而不是str'
CSV示例:
Element,XMLFile
SubElement,XMLName,XMLFile
SubElement,XMLDate,XMLName
SubElement,XMLInformation,XMLDate
SubElement,XMLTime,XMLName
预期输出:
<XMLFile>
<XMLName>
<XMLDate>
<XMLInformation />
</XMLDate>
<XMLTime />
</XMLName>
</XMLFile>
目前我的代码试图看看CSV看到父母是做什么用的新的子元素:
# Defines main element
# xmlElement = xml.Element(XMLFile)
xmlElement = xml.Element(csvData[rowNumber][columnNumber])
# Should Define desired parent (FAIL) and SubElement name (PASS)
# xmlSubElement = xml.SubElement(XMLFile, XMLName)
xmlSubElement = xml.SubElement(csvData[rowNumber][columnNumber + 2], csvData[rowNumber][columnNumber + 1])
当代码尝试使用CSV源字符串作为父参数时,Python 3.5将生成以下呃ROR:错误
TypeError: must be xml.etree.ElementTree.Element, not str
已知的原因是父paramenter被作为字符串返回,当它被预期为Element或子元素。
是否可以从CSV中调用存储的值并让它引用Element或SubElement而不是字符串?目标是允许代码读取CSV文件并将任何子元素分配给CSV中列出的父元素。
你一般会问你如何按字符串查找元素。一般来说,您需要为它创建自己的查找字典,和/或使用xpath来搜索它(效率较低,但内存较少)。或者,如果您只需要父项,如果您使用lxml,则父项将存储在元素中(与默认的ElementTree实现不同)。这有其他副作用(如果你在ElementTree中执行'e = Element(),e2 = Element(); s = SubElement(e,'s'); e2.append(s)''e'和'e2 '现在有一个副本,在lxml中它从'e'移动到'e2' ...),但它有时很有用...... –