Имам нужда от начин да използвам парсера html5lib за генериране на истински xml.etree.ElementTree. (lxml не е опция от съображения за преносимост.)
ELementTree.parse
може да приеме анализатор като незадължителен параметър
xml.etree.ElementTree.parse(source, parser=None)
но не е ясно как би изглеждал такъв анализатор. Има ли клас или обект в рамките на HTML5, който мога да използвам за аргумента parser
? Документацията за двете библиотеки по този въпрос е оскъдна.
Контекст:
Имам деформиран XHTML файл, който не може да бъде анализиран с ElementTree.parse
:
<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Title</title></head>
<body><div class="cls">Note that this br<br>is missing a closing slash</div></body>
</html>
Затова използвах html5lib.parse
вместо параметъра по подразбиране treebuilder="etree"
, който работи добре.
Но html5lib очевидно не извежда xml.etree.ElementTree
обект, а само един с почти идентичен API. Има два проблема с това:
find
на html5lib не поддържаnamespaces
параметър, което прави XPath прекалено многословен без тромав функция за обвивка.- Дебъгерът на Eclipse не поддържа разбивка на html5lib etrees.
Така че не мога да използвам нито ElementTree, нито html5lib самостоятелно.