Обновление 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 для обновления с помощью элемента из списка[]?
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