【问题标题】:Replace values in XML file with values of a vector [closed]用向量的值替换 XML 文件中的值 [关闭]
【发布时间】:2020-02-27 09:06:02
【问题描述】:

我有一个 XML 文件,我需要使用 Python 代码将“类型”之后的值替换为来自向量 v=[7,8,9] 的值。我需要代码来识别“类型”这个词,然后在下一行中更改参数的值。值 2 应替换为 v[0],3 应替换为 v[1],依此类推。有没有办法用 ElementTree 或 readlines 做到这一点?

<Model>
    <Function>
      <param>x</param>
      <param>type</param>
      <param>2</param>
      <param>5</param>
    </Function>
    <Function>
      <param>y</param>
      <param>type</param>
      <param>3</param>
      <param>2</param>
    </Function>
    <Function>
      <param>z</param>
      <param>type</param>
      <param>7</param>
      <param>9</param>
     </Function>
</Model>

【问题讨论】:

  • 使用 lxml 有一个简单的方法。希望这个问题会被重新打开(我不确定为什么它首先被关闭),届时我将能够发布它。

标签: python xml parsing elementtree


【解决方案1】:

我们可以使用模块xml.etree.ElementTree 更改值。 代码中child代表Function标签,child[x]代表Function标签中的xth元素。通过使用text属性我们可以访问元素的值。

import xml.etree.ElementTree as ET

tree = ET.parse('test.xml')
root = tree.getroot()
v = [7, 8, 9]
for child in root:
  child[2].text = str(v.pop(0))

tree.write('output.xml')

另一种方法:

我们也可以通过比较元素来解决,如果元素文本等于type,那么我们更新它旁边的值。

elements = root.findall('Function/param')

for i in range(len(elements)):
  if elements[i].text == 'type':
    elements[i + 1].text = str(v.pop(0))

tree.write('output.xml')

【讨论】:

  • 很好地使用v.pop(0);非常优雅!
  • 我需要代码来识别“类型”这个词,然后在下面一行中更改参数的值
  • @ElenaPopa 你应该编辑问题并明确说明。
猜你喜欢
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
  • 1970-01-01
相关资源
最近更新 更多