Обновление XML-элементов и значений атрибутов с помощью Python etree



Я очень новичок в скриптах Python, я пытаюсь использовать 2.7 ElementTree для анализа XML-файла, а затем обновить / заменить определенные атрибуты элемента значениями, полученными из файла тестовых данных. Идея заключается в том, чтобы иметь возможность использовать базовый XML-файл для загрузки и заполнения полей конкретными тестовыми данными и т. д. затем сохраните его как уникальный XML-файл



Моя идея решения заключалась в том, чтобы получить новые данные из CSV-файла, прочитав файл в строку, а затем разрезав строку на разделители и добавив к Список (сделано это хорошо). Затем используйте etree, чтобы каким-то образом обновить или удалить/заменить атрибут значением specifc из списка.



Я посмотрел в документации по Python ElementTree и увидел clear () и remove () element objects, но я понятия не имею о синтаксисе, чтобы использовать их адекватно



Пример XML для изменения, как показано ниже, атрибуты с XXXXX должны быть заменены / обновлены:



<TrdCaptRpt RptID="10000001" TransTyp="0">
<RptSide Side="1" Txt1="XXXXX">
<Pty ID="XXXXX" R="1"/>
</RptSide>
</TrdCaptRpt>


Предполагаемый результат будет, например:



<TrdCaptRpt RptID="10000001" TransTyp="0">
<RptSide Side="1" Txt1="12345">
<Pty ID="ABCDE" R="1"/>
</RptSide>
</TrdCaptRpt>


Как я могу использовать etree команды для изменения базового XML для обновления с помощью элемента из списка[]?

595   1  

1 ответ:

Для такого рода работы я всегда рекомендую BeautifulSoup потому что он имеет очень простой в освоении API:

from BeautifulSoup import BeautifulStoneSoup as Soup

xml = """
<TrdCaptRpt RptID="10000001" TransTyp="0">
    <RptSide Side="1" Txt1="XXXXX">
        <Pty ID="XXXXX" R="1"/>
    </RptSide>
</TrdCaptRpt>
"""

soup = Soup(xml)
rpt_side = soup.trdcaptrpt.rptside
rpt_side['txt1'] = 'Updated'
rpt_side.pty['id'] = 'Updated'

print soup

Пример вывода:

<trdcaptrpt rptid="10000001" transtyp="0">
<rptside side="1" txt1="Updated">
<pty id="Updated" r="1">
</pty></rptside>
</trdcaptrpt>

Edit: с помощью xml.etree.ElementTree можно использовать следующий скрипт:

from xml.etree import ElementTree as etree

xml = """
<TrdCaptRpt RptID="10000001" TransTyp="0">
    <RptSide Side="1" Txt1="XXXXX">
        <Pty ID="XXXXX" R="1"/>
    </RptSide>
</TrdCaptRpt>
"""

root = etree.fromstring(xml)
rpt_side = root.find('RptSide')
rpt_side.set('Txt1', 'Updated')
pty = rpt_side.find('Pty')
pty.set('ID', 'Updated')
print etree.tostring(root)

Пример вывода:

<TrdCaptRpt RptID="10000001" TransTyp="0">
    <RptSide Side="1" Txt1="Updated">
        <Pty ID="Updated" R="1" />
    </RptSide>
</TrdCaptRpt>

Comments

    Ничего не найдено.