如何使用python修改指定路径下的值?

时间:2018-07-19 11:35:10

标签: python xml

有一个如下所示的xml文件:

<aa>
  <bb>BB</bb>
    <cc>
      <dd>Tom</dd>
    </cc>
    <cc>
      <dd>David</dd>
    </cc>
</aa>

我正在尝试修改值“ Tom”和“ David”,但是在<dd>中没有任何值。然后,我尝试获取<bb>中的值,但是我的代码获得了响应“ None”。 我的代码如下:

import xml.etree.ElementTree as ET

tree = ET.parse("abc.xml")
root = tree.getroot()
a = root.find('aa/bb')
print(a)

有人可以帮助我更正我的代码以获得和修改<dd>的值吗?非常感谢。

3 个答案:

答案 0 :(得分:0)

您的顶级对象是aa。因此root是元素aa

要获取bb,只需执行root.find('bb')

>>> root
<Element 'aa' at 0x7fb1df5f0278>
>>> a = root.find('bb')
>>> a
<Element 'bb' at 0x7fb1df5f0228>

要编辑名称,请尝试类似的操作

for dd in root.findall('cc/dd'):
    if dd.text in ["Tom", "David"]:
        dd.text = "something else"

答案 1 :(得分:0)

使用ElementTree

演示:

import xml.etree.ElementTree
et = xml.etree.ElementTree.parse(filename)
root = et.getroot()

for cc in root.findall('cc'):          #Find all cc tags
    print(cc.find("dd").text)          #Print current text
    cc.find("dd").text = "NewValue"    #Update dd tags with new value

et.write(filename)                     #Write back to xml

答案 2 :(得分:0)

如果您不介意使用BeautifulSoup,则可以通过它来修改XML:

data = """<aa>
  <bb>BB</bb>
    <cc>
      <dd>Tom</dd>
    </cc>
    <cc>
      <dd>David</dd>
    </cc>
</aa>"""


from bs4 import BeautifulSoup
soup = BeautifulSoup(data, 'xml')

for dd in soup.select('cc > dd'):   # using CSS selectors
    dd.clear()
    dd.append('XXX')

print(soup.prettify())

输出:

<?xml version="1.0" encoding="utf-8"?>
<aa>
 <bb>
  BB
 </bb>
 <cc>
  <dd>
   XXX
  </dd>
 </cc>
 <cc>
  <dd>
   XXX
  </dd>
 </cc>
</aa>