Может ли 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 (например, он не справлялся с пропущенными конечными тегами правильно).

Python - лучший язык программирования в мире.