XML модификация и запись в файл прекрасный суп

XML модификация и запись в файл прекрасный суп

Я использую python beautiful soup для разбора XML-файла и записи его в другой файл после удаления определенных тегов. Но использование soup.prettify изменяет другие пространства имен XML и имена атрибутов.

f = открыть('новый.xml',"w"); f.записать(soup.prettify(formatter="xml")); f.закрыть();

Изменения приведены в примере ниже.

Исходный XML-файл.

<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"/>

Новый XML-файл, написанный из 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"/>

Я пробовал добавлять utf-8 в prettify(). Но проблема та же. Есть ли другой способ удалить определенный тег на основе поиска и сохранить все остальное содержимое XML в файле нетронутым? Пожалуйста, предложите.

решение1

Рассмотрите возможность использования собственного xml.etree.ElementTreeмодуля, который реализует простой и эффективный API для анализа и создания XML-данных. Это быстрее, лучше, проще ипитонический.

Вы можете удалить определенный элемент с помощью Element.remove().

Приведен простой пример.здесь.

Но если вы настаиваете на использованииBeautifulSoup(он использует lxmlрасширенную версию собственного модуля py), вы можете

# 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>)

Вы также можете использовать forцикл для редактирования нескольких похожих элементов.

Связанный контент