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

Ситуация, подобная следующей.

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

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

Ответы [ 2 ]

2 голосов
/ 30 января 2011

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

0 голосов
/ 06 мая 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...