Я делаю проект XML, где я пытаюсь реализовать некоторые коды с использованием Python.
Я пытаюсь получить список текстовых узлов (//text()) с помощью xpath и изменить значения в цикле for, но он не обновляется в конечном выводе. Пожалуйста, помогите мне исправить код, чтобы изменить значения текстовых узлов.
from lxml import etree
xml = "<main><a>y<b>x</b><c><d>x</d></c></a></main>"
root = etree.fromstring(xml)
nodeList = root.xpath('//text()')
for c in nodeList:
c = "test"
print (etree.tostring(root))
Output:
<main><a>y<b>x</b><c><d>x</d></c></a></main>
Каждый элемент nodeList
представляет собой специальный тип строки ( _ElementStringResult
). Строки являются неизменяемыми, поэтому невозможно присвоить новые значения.
Вот код, который работает (он также учитывает свойство tail
):
from lxml import etree
xml = "<main><a>y<b>x</b>x<c><d>x</d>y</c></a></main>"
root = etree.fromstring(xml)
for node in root.iter():
if node.text:
node.text = "test"
if node.tail:
node.tail = "TAIL"
print(etree.tostring(root).decode())
Выход:
<main><a>test<b>test</b>TAIL<c><d>test</d>TAIL</c></a></main>