C / C ++, libxml2: разбор фрагментов HTML - PullRequest
2 голосов
/ 20 февраля 2012

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

1 Ответ

2 голосов
/ 18 сентября 2012

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

...