使用Python更改XML中的值

2024-09-29 17:20:07 发布

您现在位置:Python中文网/ 问答频道 /正文

<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脚本将值1、2和3替换为其他数字。请建议需要做什么


Tags: key脚本valueitems数字itemone建议
3条回答

为了操纵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>

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

您可以使用ElementTree。有了它,您可以将xml加载到多维列表中,在那里您可以按层次结构访问元素。例如,从根开始,您可以将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')

相关问题 更多 >

    热门问题