Может ли pugixml сама закрывать теги или игнорировать незакрытый тег?
Finally, there are two more flags, that indicate closing tag parsing. When pugixml meets a close tags, there are three ways:
check that the tag name matches the opening tag, return an error if it does not. This is a standard-compliant way, is controlled by parse_check_end_tags flag, which is on in W3C mode
try to find the corresponding tag name (so that <foo> <bar> </foo> will be parsed correctly). This is controlled by parse_match_end_tags, which is on by default
just treat the tag as a closing tag for the node (so that <foo> ... </bar> will be parsed as <foo> ... </foo>). This is the fastest way, and this is what pugxml is doing, but it can corrupt your DOM tree. This way is chosen if both parse_check_end_tags and parsse_match_end_tags are off.
Здравствуйте, st0nx, Вы писали:
S>Может ли pugixml сама закрывать теги или игнорировать незакрытый тег?
Ни один xml-процессор не имеет права так делать. Единственная допустимая реакция на ill-formed xml — это прекращение обработки с выдачей сообщения об ошибке.
Здравствуйте, Centaur, Вы писали:
C>Здравствуйте, st0nx, Вы писали:
S>>Может ли pugixml сама закрывать теги или игнорировать незакрытый тег?
C>Ни один xml-процессор не имеет права так делать. Единственная допустимая реакция на ill-formed xml — это прекращение обработки с выдачей сообщения об ошибке.
Очень жаль. Я им разбирал html документы, в которых встречаются не закрывающиеся теги типо <link...>. По сути мне нужно построить DOM дерево с данными и по возможности с параметрами тегов. Не закрывающиеся теги можно опускать или принимать просто как за данные узла где они находятся. Может есть какая то готовая библиотека для такой задачи? мне нужна кросс-платформенная, максимально быстрая.
Здравствуйте, st0nx, Вы писали:
S>Здравствуйте, Centaur, Вы писали:
C>>Здравствуйте, st0nx, Вы писали:
S>>>Может ли pugixml сама закрывать теги или игнорировать незакрытый тег?
C>>Ни один xml-процессор не имеет права так делать. Единственная допустимая реакция на ill-formed xml — это прекращение обработки с выдачей сообщения об ошибке.
S>Очень жаль. Я им разбирал html документы, в которых встречаются не закрывающиеся теги типо <link...>. По сути мне нужно построить DOM дерево с данными и по возможности с параметрами тегов. Не закрывающиеся теги можно опускать или принимать просто как за данные узла где они находятся. Может есть какая то готовая библиотека для такой задачи? мне нужна кросс-платформенная, максимально быстрая.
Если разбирать html на С/C++ есть в libxml отдельный [http://xmlsoft.org/html/libxml-HTMLparser.html]html парсер[/url]. Он умеет строить DOM, но это C вплохом смысле этого слова, его бы я не рекомендовал. А есть hubbub парсер, дерево он строит, тоже на C, он действительно хорош, его бы я порекомендовал.
Для плюсов есть htmlcxx, правда он не выглядит особо живым.
Здравствуйте, hotdox, Вы писали:
H>Здравствуйте, st0nx, Вы писали:
S>>Здравствуйте, Centaur, Вы писали:
C>>>Здравствуйте, st0nx, Вы писали:
S>>>>Может ли pugixml сама закрывать теги или игнорировать незакрытый тег?
C>>>Ни один xml-процессор не имеет права так делать. Единственная допустимая реакция на ill-formed xml — это прекращение обработки с выдачей сообщения об ошибке.
S>>Очень жаль. Я им разбирал html документы, в которых встречаются не закрывающиеся теги типо <link...>. По сути мне нужно построить DOM дерево с данными и по возможности с параметрами тегов. Не закрывающиеся теги можно опускать или принимать просто как за данные узла где они находятся. Может есть какая то готовая библиотека для такой задачи? мне нужна кросс-платформенная, максимально быстрая.
H>Если разбирать html на С/C++ есть в libxml отдельный [http://xmlsoft.org/html/libxml-HTMLparser.html]html парсер[/url]. Он умеет строить DOM, но это C вплохом смысле этого слова, его бы я не рекомендовал. А есть hubbub парсер, дерево он строит, тоже на C, он действительно хорош, его бы я порекомендовал. H>Для плюсов есть htmlcxx, правда он не выглядит особо живым.
У вас нету какого-нибудь примера по hubbub? Очень мало документации по нему...
Здравствуйте, st0nx, Вы писали:
H>>, дерево он строит
S>У вас нету какого-нибудь примера по hubbub? Очень мало документации по нему...
Ну в ссылке и пример.
Как и все C-либы он базируется на callback и контекстах кастуемых к void*. Вы в своем коллбэке приводите void* к тому типу, который туда передали. А самому парсеру ставите свой callback на нужное событие и экземпляр рабочего типа (например дерево, которые вы строите). В C очень удобно читать хедеры там подробные комментарии
Здравствуйте, st0nx, Вы писали:
S>Очень жаль. Я им разбирал html документы, в которых встречаются не закрывающиеся теги типо <link...>.
В html вообще может почти все что угодно не закрываться.
S>По сути мне нужно построить DOM дерево с данными и по возможности с параметрами тегов. Не закрывающиеся теги можно опускать или принимать просто как за данные узла где они находятся. Может есть какая то готовая библиотека для такой задачи? мне нужна кросс-платформенная, максимально быстрая.
Можно попробовать сначала прогнать через htmltidy, а потом уже пуги.
Здравствуйте, hotdox, Вы писали:
H>Здравствуйте, st0nx, Вы писали: S>>У вас нету какого-нибудь примера по hubbub? Очень мало документации по нему... H>Если ясности не прибавиться, то как доберусь домой набросаю примерчик
Вот в качестве примера html pretty printer