Modificação de XML e gravação em arquivo de bela sopa

Modificação de XML e gravação em arquivo de bela sopa

Estou usando o python beautiful sopa para analisar um arquivo XML e gravá-lo em um arquivo diferente após a exclusão de determinadas tags. Porém, o uso de sopa.prettify altera outros namespaces XML e nomes de atributos.

f = open('new.xml',"w"); f.write(soup.prettify(formatter="xml")); f.fechar();

As alterações são fornecidas no exemplo abaixo.

Arquivo XML original.

<draw:control text:anchor-type="paragraph" draw:z-index="1" draw:style-name="gr1" draw:text-style-name="P2" svg:width="2.805cm" svg:height="1.853cm" svg:x="3.602cm" svg:y="0.824cm" draw:control="control2"/>

Novo arquivo XML escrito em sopa.prettify.

  <draw:control draw:control="control2" draw:style-name="gr1" draw:text-style-name="P2" draw:z-index="1" svg:height="1.853cm" svg:width="2.805cm" svg:x="3.602cm" svg:y="0.824cm" text:anchor-type="paragraph"/>

Tentei adicionar utf-8 ao prettify(). Mas é o mesmo problema. Existe algum outro método para excluir uma tag específica com base na pesquisa e manter intactos todos os outros conteúdos XML do arquivo? Por favor sugira.

Responder1

Considere usar xml.etree.ElementTreeum módulo nativo que implemente uma API simples e eficiente para analisar e criar dados XML. É mais rápido, melhor, mais fácil epitônico.

Você pode remover um elemento específico usando Element.remove().

Um exemplo básico é dadoaqui.

Mas se você insiste em usarLindaSopa(ele usa lxmluma versão aprimorada do módulo py nativo), você pode

# beautifulstonesoup for XML parsing
from BeautifulSoup import BeautifulStoneSoup 

xml_data = """
<draw:control text:anchor-type="paragraph" draw:z-index="1" draw:style-name="gr1" draw:text-style-name="P2" svg:width="2.805cm" svg:height="1.853cm" svg:x="3.602cm" svg:y="0.824cm" draw:control="control2"/>
"""
soup = BeautifulStoneSoup(xml_data)
print soup.prettify()
soup.find(<your tag/element).replaceWith(<whateveryouwant>)

Você também pode usar um forloop para editar vários elementos semelhantes.

informação relacionada