问题在于,minidom 是一个不读取外部实体的 XML 解析器。这意味着它根本不看 DTD(文档类型定义),所以它不知道在 HTML 中,名为 id
的属性对应于 ID
的模式类型。
这还带来了一个后果,就是 minidom 不会识别像 é
这样的 HTML 特定实体,这些实体是在 XHTML 文档类型中定义的,所以你可能会因此丢失一些文本。
如果你对此不在意,可以继续使用 minidom,并通过其他方式获取表格,比如使用 getElementsByTagName
方法,然后手动检查 element.id
。你也可以自己写一个 getElementById
函数来慢慢实现这个功能。
或者,你可以使用一个允许外部实体的 XML 解析器,比如 pxdom。不过这样的话,解析器每次都需要从 W3 获取并解析 DTD,这样会非常慢。
另外,你也可以选择一个 HTML 解析器,比如 BeautifulSoup,它内置了 HTML 实体和 ID 的处理。这在处理真实的 HTML 页面时可能是个更好的选择,因为这些页面虽然可能声称是 XHTML,但实际上常常包含一些格式不规范的内容。