Мне нужно добавить объявление ATTLIST к тегу DOCTYPE в HTML-документах.
После прочтения документации и поиска в Google вот что я придумал:
from bs4 import BeautifulSoup, Doctype
# minimal html document
doc = """<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html/>"""
soup = BeautifulSoup(doc, features='html.parser')
# the modified doctype tag
doctype = """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
[<!ATTLIST span bodyref CDATA #IMPLIED>] >"""
dt = BeautifulSoup(doctype, features='html.parser')
for item in soup.contents:
if isinstance(item, Doctype):
item.replace_with(dt)
break
print(soup.prettify(formatter=None))
Это приводит к желаемому результату, но кажется немного «хакерским».Я хотел бы просто вставить часть ATTLIST в тег, а не заменять все, как я сделал здесь.Кто-нибудь знает, как это сделать?