2012-02-20 2 views
0

Мне нужно разобрать реальные 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 и как?

ответ

0

Я думаю, вам нужно преобразовать html в xml. В Java я использую JSoup, но stackoverflow точно знает, как это сделать в c. Первый удар: HTML to XML conversion with C++