Замените значения в файле XML значениями вектора, используя python - PullRequest
1 голос
/ 28 февраля 2020

У меня есть файл XML, и мне нужно заменить значение, которое идет сразу после «type», значением из вектора v=[7,8,9], используя код Python. Мне нужен код, чтобы распознать слово «тип», а затем изменить значение параметра в следующей строке. Значение 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>

1 Ответ

1 голос
/ 28 февраля 2020

Попробуйте так:

from lxml import etree
doc = etree.fromstring(model)
v = [7, 8, 9]
targets = doc.xpath('//Model/Function/param[.="type"]')
for target in targets:
    chn = target.xpath('following-sibling::*[1]')[0]
    chn.text = str(v.pop(0))
print(etree.tostring(doc).decode())

Вывод:

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