使用Python更改XML中的值

时间:2018-07-19 17:10:05

标签: python xml

<inboundContextData>
 <items>
    <item>
        <key>a</key>
        <value>One</value>
    </item>
    <item>
        <key>b</key>
        <value>Two</value>
    </item>
    <item>
        <key>c</key>
        <value>Three</value>
    </item>
 </items>
</inboundContextData>

我必须使用python脚本用其他数字替换值One,Two和3。请建议需要做什么

3 个答案:

答案 0 :(得分:0)

要处理XML文档,可以使用BeautifulSoup包。示例:

data = """
<inboundContextData>
<items>
    <item>
        <key>a</key>
        <value>One</value>
    </item>
    <item>
        <key>b</key>
        <value>Two</value>
    </item>
    <item>
        <key>c</key>
        <value>Three</value>
    </item>
</items>"""


from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'xml')

my_new_value = 'XXX'

for value in soup.select('items > item > value'):
    value.clear()
    value.append(my_new_value)

print(soup.prettify())

输出:

<?xml version="1.0" encoding="utf-8"?>
<inboundContextData>
 <items>
  <item>
   <key>
    a
   </key>
   <value>
    XXX
   </value>
  </item>
  <item>
   <key>
    b
   </key>
   <value>
    XXX
   </value>
  </item>
  <item>
   <key>
    c
   </key>
   <value>
    XXX
   </value>
  </item>
 </items>
</inboundContextData>

答案 1 :(得分:0)

使用ElementTree

演示:

import xml.etree.ElementTree
et = xml.etree.ElementTree.parse(filename)
root = et.getroot()
for i in root.findall("item"):
    i.find("value").text = "NewNumber"

et.write(filename)

输出:

<items>
    <item>
        <key>a</key>
        <value>NewNumber</value>
    </item>
    <item>
        <key>b</key>
        <value>NewNumber</value>
    </item>
    <item>
        <key>c</key>
        <value>NewNumber</value>
    </item>
</items>

答案 2 :(得分:0)

您可以使用ElementTree。这样,您可以将xml加载到多维列表中,在其中可以分层访问元素。例如,从root开始,您的xml可以看到:

<inboundContextData> <- root
<items> root <- 0
    <item> root <- 0 <- 0
        <key>a</key>
        <value>One</value> root <-0 <-0<-1
    </item>
    <item>
        <key>b</key>
        <value>Two</value>
    </item>
    <item>
        <key>c</key>
        <value>Three</value>
    </item>
</items>

因此,要更改第一个“值”,您可以这样做:

from xml.etree import ElementTree as ET

xml = ET.parse('testfile.xml')
root = xml.getroot()

root[0][0][1].text = 'Five'

xml.write('testfile.xml')