Может ли BeautifulSoup анализировать xml, когда определенный тег является самозакрывающимся и не в то же время

Ситуация следующая.

XML-файл:

<tag1/> <tag2>some_data</tag2> <tag1>some_another_data</tag1> 

tag1 иногда самозакрывается и иногда имеет данные внутри.

код:

 from BeautifulSoup import BeautifulStoneSoup s = '<tag1/><tag2>some_data</tag2><tag1>some_another_data</tag1>' soup1 = BeautifulStoneSoup(s) soup2 = BeautifulStoneSoup(s, selfClosingTags=["tag1"]) print soup1.prettify() print print soup2.prettify() 

вывод:

 <tag1> <tag2> some_data </tag2> </tag1> <tag1> some_another_data </tag1> <tag1 /> <tag2> some_data </tag2> <tag1 /> some_another_data 

В первом случае tag1 ест следующий тег (если он еще не тег1), потому что по умолчанию не поддерживается самозакрывающихся тегов. во втором случае самозакрывающийся тег не поддерживает дочерние теги.

Я просто хочу, чтобы структура была оригинальным XML-документом. Возможно ли это с помощью BeautifulSoup? И если это возможно, то как сделать все теги самозакрывающимися по умолчанию? Существует много xml-файлов, и я не хочу искать все такие ситуации вручную.

2 Solutions collect form web for “Может ли BeautifulSoup анализировать xml, когда определенный тег является самозакрывающимся и не в то же время”

Я бы не рекомендовал BeautifulSoup (даже для разбора HTML). Используйте ElementTree из стандартной библиотеки или lxml , если вам нужна более мощная библиотека XML.

Вы можете сказать BeautifulSoup 4 («bs4») использовать другой парсер (например, lxml), указав его в конструкторе. Я бы полностью избегал более ранних версий и избегал использования парсера по умолчанию с помощью bs4 (например, он не справлялся с пропущенными конечными тегами правильно).

  • Как получить плоский XML, чтобы внешние объекты были объединены на верхний уровень
  • Python: удаление определенного символа (u "\ u2610") из строки
  • Разбор файла с несколькими xmls в нем
  • Анализ XML из веб-ответа
  • Python Lxml - добавьте существующий xml с новыми данными
  • Прогулка по всем узлам XML в элементарной структуре
  • Настройка атрибутов шрифтов с использованием Python-Docx
  • аргумент типа «NoneType» не повторяется
  • Python - лучший язык программирования в мире.