AttributeError вставляется в l xml Дерево в Python - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь вставить небольшую структуру xml в указанное c место в уже существующем xml файле:

<not>
  <elt>
    <isVal>Y</isVal>
  </elt>
</not>

Мой код выглядит так:

import lxml.etree as ElementTree;

tree = ElementTree.ElementTree()
tree.parse(file_path)

root = tree.getroot();
ruleElement = tree.find('.//rule');

for child_n in ruleElement:
    if (child_n.tag == 'and'):
        print "Found rule - and"
        ruleElement.insert(0, tree.XML("<not><elt><isVal>Y</isVal></elt></not>"))

Я получаю следующую ошибку: AttributeError: объект 'l xml .etree._ElementTree' не имеет атрибута 'XML'

Я также пробовал:

for child_n in ruleElement:
    if (child_n.tag == 'and'):
        print "Found rule - and"
        child_n.Element(child_n, 'test_insert').text = 'test'
        child_n.insert(1, item[0])      

Это дает: AttributeError: объект 'l xml .etree._ElementTree' не имеет атрибута 'Element'

Пробовал как SubElement, получил то же сообщение об ошибке: AttributeError: объект 'l xml .etree._Element' не имеет атрибута 'SubElement'

Я получил идеи о том, как это сделать, из других похожих вопросов, но он просто, похоже, не хочет принимать Element, SubElement или XML в качестве приемлемых атрибутов. Что я делаю не так?

Я использую Python 2.6, обновление невозможно.

1 Ответ

1 голос
/ 29 мая 2020

Вам нужно создать «элементы», используя lxml.etree.SubElement:

import lxml.etree

xml = lxml.etree.parse('xyz.xml')
root = xml.getroot()

nt = lxml.etree.SubElement(root, 'not')  # add to the XML root!
elt = lxml.etree.SubElement(nt, 'elt')
isVal = lxml.etree.SubElement(elt, 'isVal')
isVal.text = 'Y'

with open("xyz2.xml", 'wb') as f:
    f.write(lxml.etree.tostring(root, xml_declaration=True, encoding="utf-8"))

print(open("xyz2.xml", 'r').read())

Вывод:

<?xml version='1.0' encoding='utf-8'?>
<note>
  <to>abc</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Party</body>
<not><elt><isVal>Y</isVal></elt></not></note>
...