selfClosingTags en BeautifulSoup

Usando BeautifulSoup para analizar mi XML

import BeautifulSoup soup = BeautifulSoup.BeautifulStoneSoup( """hello""" ) # selfClosingTags=['alan']) print soup.prettify() 

Esto dará como resultado:

   hello   

es decir, la etiqueta anne es un elemento secundario de la etiqueta alan.

Si paso selfClosingTags = [‘alan’] cuando creo la sopa, obtengo:

   hello  

¡Genial!

Mi pregunta: ¿por qué no se puede usar la presencia de /> para indicar una etiqueta de cierre automático?

Usted está preguntando qué pensaba un autor, después de haber notado que él da nombres como Beautiful [Stone] Soup a las clases / módulos 🙂

Aquí hay dos ejemplos más del comportamiento de BeautifulStoneSoup:

 >>> soup = BeautifulSoup.BeautifulStoneSoup( """hello""" ) >>> print soup.prettify()   hello   >>> soup = BeautifulSoup.BeautifulStoneSoup( """hello""", selfClosingTags=['alan']) >>> print soup.prettify()   hello  >>> 

Mi opinión: una etiqueta de cierre automático no es legal si no está definida para el analizador. Así que el autor tuvo opciones al decidir cómo manejar un fragmento ilegal como … (1) asume que el / fue un error (2) trata a alan como una etiqueta de cierre automático de manera bastante independiente cómo se puede usar en cualquier otro lugar de la entrada (3), haga 2 pasadas sobre la entrada en la primera pasada cómo se usó cada etiqueta. ¿Qué opción prefieres?

No tengo un “por qué”, pero esto podría ser de su interés. Si usas BeautifulSoup (no Stone) para analizar XML con una etiqueta de cierre automático, funciona. Tipo de

 >>> soup = BeautifulSoup.BeautifulSoup( """hello""" ) # selfClosingTags=['alan']) >>> print soup.prettify()    hello  

El anidamiento es correcto, incluso si alan se representa como una etiqueta inicial y final.