В настоящее время я пытаюсь создать XML-файл из файла CSV. В настоящее время мой код читает файл CSV для данных и начинает создавать XML из данных, которые хранятся в CSV.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 генерирует следующий er ROR:
TypeError: must be xml.etree.ElementTree.Element, not str
Известный причиной ошибки является то, что родитель paramenter возвращается в виде строки, когда она, как ожидается, будет элемент или подэлемент.
Можно ли вспомнить сохраненное значение из CSV и связать ли он элемент или подэлемент вместо строки? Цель состоит в том, чтобы позволить коду читать CSV-файл и назначать любой SubElement родительскому элементу, указанному в CSV.
вы вообще спрашиваете, как вы смотрите на элементы по строкам. в общем, вам нужно будет создать свой собственный словарь для поиска и/или использовать xpath для его поиска (менее эффективное, но меньше памяти). поочередно, если вам просто нужен родительский элемент, если вы используете lxml, родительский элемент хранится в элементе (в отличие от реализации ElementTree по умолчанию). это имеет другие побочные эффекты (если вы делаете e = Element(), e2 = Element(); s = SubElement (e, 's'); e2.append (s) ', в ElementTree -' e' и 'e2 'теперь есть копия, в lxml она перемещается из' e' в 'e2' ...), но иногда это полезно ... –