XML modificar e escrever para arquivo sopa bonita

1

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

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

As alterações são dadas na amostra 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 de soup.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"/>

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

    
por Akhitha 09.05.2014 / 08:54

1 resposta

2

Considere o uso do módulo nativo xml.etree.ElementTree , que implementa uma API simples e eficiente para analisar e criar dados XML. É mais rápido, melhor, mais fácil e pythonic .

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

Um exemplo básico é fornecido aqui .

Mas se você insistir em usar BeautifulSoup (ele usa lxml , uma 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 loop for para editar vários elementos semelhantes também.

    
por 09.05.2014 / 09:09

Tags