Мне нужно разобрать реальные HTML-документы. В большинстве случаев они хорошо сформированы, но иногда (и их нельзя игнорировать) они появляются как фрагменты, имеющие более одного брата на корневом уровне.
Пример:C/C++, libxml2: разбор HTML-фрагментов
<div>one</div>
<div>two</div>
Теперь я использую libxml2 v2.7.8 со следующими синтаксическим анализом флагов:
HTML_PARSE_NOERROR | HTML_PARSE_RECOVER | HTML_PARSE_NODEFDTD | HTML_PARSE_NOIMPLIED
Если я кормлю его с приведенным выше примером, а затем сбросить HTML из разобранного документа:
<div>one<div>two</div></div>
Как вы можете видеть, это гнезда элементов, в то время как мои требования не нарушают HTML. Также я хотел бы иметь возможность запускать выражение XPath на деревьях, созданных из таких фрагментов. В этом случае для перехода ко второму DIV нужно использовать '/ div [2]'.
Итак, вопрос в том, можно ли анализировать эти виды HTML и как?