Как изменить значение c для файла xml, используя python - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть XML файл со структурой, похожей на:

<config>
    <property>
        <name>prop1</name>
        <value>1</value>
    </property>
    <property>
        <name>prop2</name>
        <value>2</value>
    </property>
    <property>
        <name>prop3</name>
        <value>3</value>
    </property>
    <property>
        <name>prop4</name>
        <value>4</value>
    </property>
</config>

Как я могу изменить значение prop3 на 10, используя python xml .etree.ElementTree?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

См. Ниже.
(Нет необходимости l oop по всем элементам - используйте метод 'find' и указывайте непосредственно на элемент, который вы хотите изменить. Нет необходимости использовать внешнюю библиотеку как хорошо.).

import xml.etree.ElementTree as ET


xml = '''<config>
    <property>
        <name>prop1</name>
        <value>1</value>
    </property>
    <property>
        <name>prop2</name>
        <value>2</value>
    </property>
    <property>
        <name>prop3</name>
        <value>3</value>
    </property>
    <property>
        <name>prop4</name>
        <value>4</value>
    </property>
</config>'''

root = ET.fromstring(xml)
prop3 = root.find(".//property/[name='prop3']")
prop3_val = prop3.find('value')
print(prop3_val.text)
prop3_val.text = 10
print(prop3_val.text)

вывод

3
10
0 голосов
/ 06 февраля 2020

Вы можете сделать следующее (просто взгляните на документацию l xml).

import lxml.etree as ET

file = "file.xml"

# Grab the root (config node)
root = ET.parse(file).getroot()

# Grab all 'property' nodes
properties = root.findall("property")

# Iterate over them
for property in properties:
  # Find the property with name 'prop3'
  if property.find("name").text == "prop3":
    # Update the value to ten
    property.find("value").text = "10"

# Write back the modified file
with open(file, "w") as f:
  f.write(ET.tostring(root, encoding="unicode"))

Бонус, вы можете изменить последнюю строку на f.write(ET.tostring(root, encoding="unicode", pretty_print=True)), чтобы получить хороший XML файл с отступом и возвратом.

...