Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想使用python代码更新特定xml标记的值?_Python_Xml - Fatal编程技术网

我想使用python代码更新特定xml标记的值?

我想使用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

但是我无法看到更改,或者我目前不知道如何在现有xml文件中写入这个新值subelem.text=“41194813”。

for循环完成了这项工作:它正确地替换了文本。更改发生在
根变量中。您可以通过在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')