Как проанализировать и изменить данные XML с помощью Python LXML - PullRequest
0 голосов
/ 15 июня 2019

Мне нужно изменить значения тегов XML, используя lxml (Автор и Описание), анализируя файлы XML. ниже - входной файл, который я использую, и выходной файл, который мне нужен. Ниже код, который я использую:

входной XML-файл:

<Summary>  
<Author>ABC</Author>  
<Description>ABC DATA</Description>  
<Function>24</Function>  
</Summary>

Требуемый выходной файл:

<Summary>  
<Author>DEF</Author>  
<Description>DEF DATA</Description>  
<Function>24</Function>  
</Summary> 

from lxml import etree  
root = etree.parse(r"C:\Users\input\input.xml")  
    for elem in root.xpath('.//Author'): 
    elem.text = "DEF"  
    root.write("output.xml", pretty_print=True,xml_declaration=True,encoding="UTF-8")

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

Если вы только хотите заменить каждое вхождение "ABC" на "DEF", но в противном случае оставьте текст как есть, это должно быть сделано:

dat = [your input above]

nodes = ['Author','Description']
for node in nodes:
    for elem in root.xpath(f'.//{node}'): 
        elem.text = elem.text.replace("ABC","DEF")  

Выход - ваш желаемый результат.

0 голосов
/ 15 июня 2019

Это должно работать

import xml.etree.ElementTree as ET

xml = '''<root>
    <Summary>  
        <Author>ABC</Author>  
        <Description>ABC DATA</Description>  
        <Function>24</Function>  
    </Summary>
    <Summary>  
        <Author>ABC</Author>  
        <Description>ABC DATA</Description>  
        <Function>24</Function>  
    </Summary>
</root>'''

tree = ET.fromstring(xml)
for author in tree.findall('.//Summary/Author'):
    author.text = 'new author value goes here'
for desc in tree.findall('.//Summary/Description'):
    desc.text = 'new desc value goes here'

ET.dump(tree)
# call the line below if you need to save to a file
# tree.write(open('new_file.xml', 'w'))

вывод

<root>
    <Summary>  
        <Author>new author value goes here</Author>  
        <Description>new desc value goes here</Description>  
        <Function>24</Function>  
    </Summary>
    <Summary>  
        <Author>new author value goes here</Author>  
        <Description>new desc value goes here</Description>  
        <Function>24</Function>  
    </Summary>
</root>
...