Проблема в том, что minidom - это синтаксический анализатор не для чтения внешних объектов. Это означает, что он даже не смотрит на DTD, поэтому он не знает, что в HTML атрибут с именем id
соответствует типу схемы ID
.
Еще одним следствием этого является то, что minidom не будет знать о специфических для HTML сущностях, таких как é
, которые определены в типе XHTML, поэтому вы можете потерять текст таким образом.
Если вас это не волнует, вы можете продолжить использовать minidom и использовать альтернативный способ добраться до стола, включающий getElementsByTagName
и проверку element.id
вручную. (Вы можете взломать свою собственную функцию getElementById
, чтобы сделать это медленным способом.)
Или вы можете использовать синтаксический анализатор XML, который разрешает внешние объекты, такие как pxdom. Однако это означает, что синтаксический анализатор должен будет каждый раз получать и анализировать DTD из W3, что будет неприятно медленным.
Или вы можете использовать синтаксический анализатор HTML, в котором есть встроенные сущности HTML и идентификаторы ID, например BeautifulSoup. Это может быть лучшей идеей, когда вы имеете дело с реальными HTML-страницами, которые обозначаются как text/html
, хотя они могут претендовать на звание XHTML и часто содержат непослушные фрагменты, которые плохо сформированы.