Изменения в дереве XML, использующие Elementtree, не обновляются - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь вставить дочерний элемент в родительский элемент, но по какой-то причине мне не удается обновить дерево, чтобы записать файл, содержащий дочерний элемент, который я только что создал. Может кто-нибудь, пожалуйста, дайте мне знать, что мне не хватает?

Это то, что у меня есть

<text>
  <p>
  </p>
  <p>
  </p>
</text>

И это то, что мне нужно

<text>
  <p>
    <s>
    </s>
  </p>


  <p>
    <s>
    </s>
  </p>
</text>

tree = et.parse('/Users/missogra/Desktop/test/s_tagging/1.txt')
root = tree.getroot()
for element in root:
    if element.tag == 'p':
        p = et.Element("p")
        child = et.SubElement(p, "s" )
# How to update the new root from here?

1 Ответ

0 голосов
/ 06 июля 2018

Проблема в том, что этот код

p = et.Element("p")
child = et.SubElement(p, "s" )

создает новый элемент <p>, который не является частью дерева, и присоединяет к нему подэлемент. Само дерево осталось без изменений.

Присоедините новый подэлемент к элементу <p>, который вы найдете в дереве.

>>> for elem in root:
...     if elem.tag == 'p':
...         ET.SubElement(elem, 's')
... 
<Element 's' at 0x7f7810b24e58>
<Element 's' at 0x7f780ffdf4f8>

>>> ET.tostring(root)
b'<text><p><s /></p><p><s /></p></text>'
...