Форум программистов, компьютерный форум, киберфорум
Наши страницы
Avazart
Войти
Регистрация
Восстановить пароль
Темы блога относятся к программированию на языке С++

В основном для C++Qt (Qt5.1) и C++ Builder (RAD 2009 и RAD XE3)
Рейтинг: 5.00. Голосов: 2.

Подключение библиотеки libxml2 к Builder2009

Запись от Avazart размещена 09.07.2012 в 00:34
Обновил(-а) Avazart 13.10.2014 в 18:36

Запись дорабатывается

О библиотеке:
Цитата:
libxml2 — это свободная Си библиотека, первоначально написанная для проекта Gnome, но в последствии код библиотеки был перенесён на многие платформы: Linux, Unix, Windows, CygWin, MacOS, MacOS X, RISC Os, OS/2, VMS, QNX, MVS и др.. В качестве внутренней кодировки используется UTF-8, поэтому, при работе с файлом в другой кодировке, автоматически будет выполняться перекодировка в UTF-8. По умолчанию поддерживаются следующие кодировки: UTF-8, UTF-16, ISO-Latin-1, ASCII и спецсимволы HTML для конвертации UTF-8 в ASCII. Для работы с другими кодировками библиотеку libxml2 нужно собирать с поддержкой iconv.
Модуль HTMLparser реализует API, для разбор HTML 4.0 кода из «реального мира», в котором могут содержатся ошибки или отклонения от стандарта.
Скачать можно здесь:

http://www.cyberforum.ru/redirector....0xLWxpYi56aXA=
http://xmlsoft.org/sources/win32/oldreleases/

Но также придётся дополнительно скачать некоторые dll-ки:
Название: libxml-pkgdeps.png
Просмотров: 5135

Размер: 14.3 Кб


1. libxml2.dll ( почему её нет в библиотеке не пойму)
2. iconv.dll ( можно содрать также отсюда http://www.cyberforum.ru/blogs/131347/blog533.html )
3. zlib1.dll

dll-ки легко найти в интернете.

Руководство:
http://xmlsoft.org/examples/index.html
http://www.xmlsoft.org/tutorial/xmltutorial.pdf


В проект надо подключать libxml2-bcc.lib ( OMF -формата как раз для Builder-а)
О том как можно подключить lib-файлы можно почитать тут:

http://www.cyberforum.ru/blogs/131347/blog478.html
http://www.cyberforum.ru/blogs/131347/blog533.html

В опциях проекта необходимо указать путь к папке проекта:

Нажмите на изображение для увеличения
Название: Указание пути к файлу проекта.jpg
Просмотров: 760
Размер:	236.6 Кб
ID:	929

Пример тест-кода взят отсюда http://ckod-doc.narod.ru/doc/libxml_html_parser.html

Цитата:
Ниже приведён пример, в котором библиотека libxml2 используется для изменения HTML файла, событию onload тега <body> присоединяется скрипт «alert('Hello libXML!');»:
В качестве html-файла взята сохраненная страничка форума.

Просмотреть код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
 
#include <libxml/parser.h>
#include <libxml/HTMLparser.h>
#include <libxml/HTMLtree.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
int edit_body_tag(xmlNode * a_node)
{
  xmlNode *cur_node = NULL;
 
  for (cur_node = a_node; cur_node; cur_node = cur_node->next)
  {
    if (cur_node->type == XML_ELEMENT_NODE) {
      if ( !xmlStrcmp(cur_node->name, (const xmlChar *)"body") )
      {
        //  xmlSetProp создает либо меняет значение атрибута
        xmlSetProp(cur_node, (const xmlChar *)"onload", (const xmlChar*)"alert('Hello libXML!');");
        return 1;
      }
    }
 
    if ( edit_body_tag(cur_node->children) ) return 1;
  }
  return 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
const char * filename="CyberForum.ru.html";
const char * result_file="after_parse.html";
 
xmlNode *root_element = NULL;
 
htmlDocPtr  docPtr = htmlParseFile(filename,NULL);
 
root_element = xmlDocGetRootElement(docPtr);
edit_body_tag(root_element);
 
htmlSaveFileEnc(result_file, docPtr,NULL);
 
xmlFreeDoc(docPtr);
xmlCleanupParser(); // удаляет созданные библиотекой во время разбора глобальные переменные
 
if(FileExists(result_file))
  ShellExecuteA(NULL,"open",result_file,NULL,(ExtractFileDir(result_file)).c_str(),SW_RESTORE);
else ShowMessage("Error!!!");
}
//---------------------------------------------------------------------------


После нажатия кнопки в браузере должен открыться созданый файл с алертом.

Нажмите на изображение для увеличения
Название: Результат нажатия на кнопку.jpg
Просмотров: 860
Размер:	213.9 Кб
ID:	928Нажмите на изображение для увеличения
Название: Как видно html-код добавился alert.jpg
Просмотров: 842
Размер:	363.7 Кб
ID:	927

Темы:

1. Чем вы пользуетесь при парсинге сложных сайтов?

На заметку блог о другом Си-шном парсере html:
Gumbo HTML5 парсер от Google
Вложения
Тип файла: rar test libxml.rar (1.49 Мб, 596 просмотров)
Просмотров 4469 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru