我目前正在尝试从CSV文件构建XML文件。目前,我的代码将 CSV 文件读取为数据,并开始从存储在 CSV 中的数据创建 XML。
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 会生成以下错误:
TypeError: must be xml.etree.ElementTree.Element, not str
错误的已知原因是父参数作为字符串返回,而它应该是元素或子元素。
是否可以从CSV中调用存储的值并让它引用元素或子元素,而不是字符串?目标是允许代码读取 CSV 文件并将任何子元素分配给 CSV 中列出的父元素。
我不能确定,但看起来你正在做:ElementTree.SubElement(str, str)
当你应该做的时候:ElementTree.SubElement(Element, str)
你似乎也已经知道这一点。那么,真正的问题是,当您只知道父对象的标签字符串时,您将如何引用父对象?您可以使用该特定标记字符串在 ElementTree 中搜索元素,但这通常不是一个好主意,因为 XML 允许类似元素的多个实例。
我建议你要么:
-
查找存储对父元素的引用的策略
-
查看是否有办法使用 XPath 唯一标识父元素