[英]How to find the value in particular tag elemnet in xml using python?
[英]I want to update value of a particular xml tag using python code?
My xml file looks like below :-
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Messages xmlns="URL/sampleMessages-v1">
<Header>
<TransactionId>0</TransactionId>
<RequestNo>41194812</RequestNo>
<VNo>6789</VNo>
<Source></Source>
</Header>
...
...
</Messages>
我想閱讀並更改RequestNo值
<RequestNo>41194812</RequestNo> to
<RequestNo>41194000</RequestNo>
I am using ElementTree module currently. I am using windows machine currently.
我想更新同一文件中的值。
我試過下面的代碼:
for elem in root:
for subelem in elem:
#print (subelem.tag)
if 'RequestNo' in subelem.tag :
#print (subelem.text)
subelem.text="41194813"
但是我看不到更改,或者我目前不知道如何在現有的xml文件中寫入此新值subelem.text =“ 41194813”。
您的for循環可完成此工作:它確實正確替換了文本。 更改在您的root
變量中。 您可以通過在for循環之后添加以下行來驗證這一點:
ElementTree.dump(root)
現在,您已經更新了XML,您需要將其寫入文件中:
tree.write('newfile.xml')
其中tree
是ElementTree.parse()
的結果。 因此,將所有內容放在一起:
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')
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')
在上面的示例中,我只是給您的命名空間命名為“ xxx”,它可以是任何“ foo”,“ bar”,...,但應在對root.find()
的調用中用作前綴。
為了從輸出文件中刪除“ ns0”,需要在寫之前注冊名稱空間:
ElementTree.register_namespace('', 'URL/sampleMessages-v1')
tree.write('messages-new.xml')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.