我正在做一个xml项目,尝试使用python实现一些代码。
我正在尝试使用xpath获取文本节点(// text())的列表并更改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>
答案 0 :(得分:0)
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>