2010-02-06 4 views
4

Использование BeautifulSoup разобрать мой XMLselfClosingTags в BeautifulSoup

import BeautifulSoup 

soup = BeautifulSoup.BeautifulStoneSoup("""<alan x="y" /><anne>hello</anne>""") # selfClosingTags=['alan']) 

print soup.prettify() 

Этот выход:

<alan x="y"> 
<anne> 
    hello 
</anne> 
</alan> 

т.е. тег анна является дочерним тегом алан.

Если я прохожу selfClosingTags = [ 'АЛАН'], когда я создаю суп, я получаю:

<alan x="y" /> 
<anne> 
hello 
</anne> 

Отлично!

Мой вопрос: почему нельзя использовать /> для обозначения закрывающего тега?

ответ

3

Вы спрашиваете, что было в сознании автора, после того, как отметил, что он дает имена, как красивые [камень] суп классов/модулей :-)

Вот еще два примера поведения BeautifulStoneSoup :

>>> soup = BeautifulSoup.BeautifulStoneSoup(
    """<alan x="y" ><anne>hello</anne>""" 
    ) 
>>> print soup.prettify() 
<alan x="y"> 
<anne> 
    hello 
</anne> 
</alan> 

>>> soup = BeautifulSoup.BeautifulStoneSoup(
    """<alan x="y" ><anne>hello</anne>""", 
    selfClosingTags=['alan']) 
>>> print soup.prettify() 
<alan x="y" /> 
<anne> 
hello 
</anne> 
>>> 

My take: самозакрывающийся тег не является законным, если он не определен для синтаксического анализатора. Таким образом, у автора был выбор при принятии решения о том, как обрабатывать незаконный фрагмент, например <alan x="y" /> ... (1) предположить, что ошибка / была ошибкой (2) обрабатывать alan как самозакрывающийся тег совершенно независимо от того, как он может использоваться в другом месте в ввод (3) делает 2 прохода над входным оребрением в первом проходе, как используется каждый тэг. Какой выбор вы предпочитаете?

1

У меня нет «почему», но это может вас заинтересовать. Если вы используете BeautifulSoup (no Stone) для анализа XML с самозакрывающимся тегом, он работает. Сортировать по:

>>> soup = BeautifulSoup.BeautifulSoup("""<alan x="y" /><anne>hello</anne>""") # selfClosingTags=['alan']) 
>>> print soup.prettify() 
<alan x="y"> 
</alan> 
<anne> 
hello 
</anne> 

вложенности является правильным, даже если alan визуализируется как начало и конец тега.

 Смежные вопросы

  • Нет связанных вопросов^_^