我想使用python代码更新特定xml标记的值?
但是我无法看到更改,或者我目前不知道如何在现有xml文件中写入这个新值subelem.text=“41194813”。for循环完成了这项工作:它正确地替换了文本。更改发生在我想使用python代码更新特定xml标记的值?,python,xml,Python,Xml,但是我无法看到更改,或者我目前不知道如何在现有xml文件中写入这个新值subelem.text=“41194813”。for循环完成了这项工作:它正确地替换了文本。更改发生在根变量中。您可以通过在for循环后面添加以下行来验证: for elem in root: for subelem in elem: #print (subelem.tag) if 'RequestNo' in subelem.tag : #print (subel
根变量中。您可以通过在for循环后面添加以下行来验证:
for elem in root:
for subelem in elem:
#print (subelem.tag)
if 'RequestNo' in subelem.tag :
#print (subelem.text)
subelem.text="41194813"
现在更新了XML,您需要将其写入一个文件:
ElementTree.dump(root)
其中tree
是ElementTree.parse()
的结果。所以,把所有的东西放在一起:
tree.write('newfile.xml')
处理名称空间
XML文档包含名称空间,因此如果计划搜索标记,则需要在标记名称中包含名称空间。下面是一个处理名称空间的替代解决方案:
tree = ElementTree.parse('messages.xml')
root = tree.getroot()
for elem in root:
for subelem in elem:
if 'RequestNo' in subelem.tag:
subelem.text = '41194813'
break
tree.write('messages-new.xml')
在上面的例子中,我刚刚给你的名称空间命名为“xxx”,它可以是任何“foo”、“bar”。。。但应在调用root.find()时用作前缀
正在从输出文件中删除“ns0”
为了从输出文件中删除“ns0”,您需要在写入之前注册名称空间:
tree = ElementTree.parse('messages.xml')
root = tree.getroot()
namespaces = {'xxx': 'URL/sampleMessages-v1'}
node = root.find('xxx:Header/xxx:RequestNo', namespaces)
if node is not None:
node.text = '41194813'
tree.write('messages-new.xml')
非常感谢,它很有效。但是现在在output.xml中我得到了ns0 41194813如何删除这个ns0?
tree = ElementTree.parse('messages.xml')
root = tree.getroot()
for elem in root:
for subelem in elem:
if 'RequestNo' in subelem.tag:
subelem.text = '41194813'
break
tree.write('messages-new.xml')
tree = ElementTree.parse('messages.xml')
root = tree.getroot()
namespaces = {'xxx': 'URL/sampleMessages-v1'}
node = root.find('xxx:Header/xxx:RequestNo', namespaces)
if node is not None:
node.text = '41194813'
tree.write('messages-new.xml')
ElementTree.register_namespace('', 'URL/sampleMessages-v1')
tree.write('messages-new.xml')