Python XML 'TypeError: должен быть xml.etree.ElementTree.Element, а не str'

62
4

В настоящее время я пытаюсь создать XML файл из CSV файла. В настоящее время мой код читает файл CSV для данных и начинает создавать XML из данных, которые хранятся в CSV.

Пример 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 и ссылаться на элемент Element или SubElement вместо строки? Цель состоит в том, чтобы позволить коду читать CSV файл и назначать любой SubElement родительскому элементу, указанному в CSV.

спросил(а) 2016-03-10T21:36:00+03:00 3 года, 9 месяцев назад
1
Решение
55

Я не могу точно сказать, но похоже, что вы делаете: ElementTree.SubElement(str, str)

когда вы должны делать: ElementTree.SubElement(Element, str)

Похоже, вы уже это знаете. Итак, реальный вопрос заключается в том, как вы собираетесь ссылаться на родительский объект, когда знаете только его строку тега? Вы можете искать Elements в ElementTree с этой конкретной строкой тега, но это, как правило, не очень хорошая идея, поскольку XML допускает несколько экземпляров подобных элементов.

Я бы предложил вам:

    Найти стратегию хранения ссылок на родительские элементы

    Посмотрите, есть ли способ однозначно идентифицировать родительский элемент с помощью XPath

ответил(а) 2016-03-10T22:58:00+03:00 3 года, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема