簡體   English   中英

我想使用python代碼更新特定xml標簽的值嗎?

[英]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')

其中treeElementTree.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”

為了從輸出文件中刪除“ ns0”,需要在寫之前注冊名稱空間:

ElementTree.register_namespace('', 'URL/sampleMessages-v1')
tree.write('messages-new.xml')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM