Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> xml парсер под Linux 
V
    Опции темы
admsasha
Дата 7.1.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: 1
Всего: 6



На форуме примеры парсинга только под windows и библиотекой .DLL, что для Linux не применимо...

Пожалуйста, киньте код простейшего xml парсинга ?  smile 
PM MAIL WWW ICQ Jabber   Вверх
MAKCim
Дата 7.1.2007, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



ну в Python должна быть, в Perl
да и на С libxml


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 7.1.2007, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



Код

/*
 * (c) Oleg Puchinin 2006
 * [email protected]
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <libxml/parser.h>
#include <libxml/tree.h>

static void
print_element_names(xmlNode * a_node, int n)
{
    int i;
    xmlNode *cur_node = NULL;
    
    for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
        for (i = 0; i < n; ++i) 
            fputc ('\t', stdout);

        if (cur_node->type == XML_ELEMENT_NODE)
            printf("%s", cur_node->name);
        if (cur_node->type == XML_TEXT_NODE)
            printf ("%s", cur_node->content);
        printf ("\n");        
        print_element_names(cur_node->children, n+1);
    }
}

int main (int argc, char ** argv)
{
    xmlDocPtr doc;
    xmlNodePtr tree, subtree, root_element;

    root_element = NULL;

    doc = xmlNewDoc((const xmlChar*) "1.0");
    doc->children = xmlNewDocNode(doc, NULL, (const xmlChar*) "EXAMPLE", NULL);
    xmlSetProp(doc->children, (const xmlChar*) "prop1", (const xmlChar*) "gnome is great");
    xmlSetProp(doc->children, (const xmlChar*) "prop2", (const xmlChar*) "& linux too");
    
    tree = xmlNewChild(doc->children, NULL, (const xmlChar*) "head", NULL);
    subtree = xmlNewChild(tree, NULL, (const xmlChar*) "title", (const xmlChar*) "Welcome to Gnome");
    tree = xmlNewChild(doc->children, NULL, (const xmlChar*) "chapter", NULL);
    subtree = xmlNewChild(tree, NULL, (const xmlChar*) "title", (const xmlChar*) "The Linux adventure");
    subtree = xmlNewChild(tree, NULL, (const xmlChar*) "p", (const xmlChar*) "bla bla bla ...");
    subtree = xmlNewChild(tree, NULL, (const xmlChar*) "image", NULL);
    
    xmlSetProp(subtree, (const xmlChar*) "href", (const xmlChar*) "linus.gif");
    xmlSaveFile("my.xml", doc);
    xmlFreeDoc(doc);
    
    doc = xmlReadFile("my.xml", NULL, 0);
    
    if (doc == NULL) {
        printf("error: could not parse file %s\n", "my.xml");
        return EXIT_FAILURE;
    }
    
    root_element = xmlDocGetRootElement(doc);
    print_element_names(root_element, 0);
    
    xmlFreeDoc(doc);
    xmlCleanupParser();

    return EXIT_SUCCESS;
}

Создаст xml файло, сохранит, загрузит и распарсит. помнится надо -lxml  и все  smile 
Да, я код только модифицировал под свои нужды. Вообще в libxml2 сэмпл очень хороший.

Это сообщение отредактировал(а) GrayCardinal - 7.1.2007, 13:09


--------------------
PM MAIL WWW   Вверх
admsasha
Дата 7.1.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: 1
Всего: 6



Спасибо.
PM MAIL WWW ICQ Jabber   Вверх
GrayCardinal
Дата 7.1.2007, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



admsasha
 smile 


--------------------
PM MAIL WWW   Вверх
bsa
Дата 12.1.2007, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



А есть еще очень классный парсер TinyXML. Это C++. Свободная лицензия (т.е. можно включать в проприетарный код). Очень удобно работать.
PM   Вверх
GrayCardinal
Дата 12.1.2007, 04:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



bsa
Как у нее насчет действительно больших файло ? Доступ по ключикам не тормозит ? smile 


--------------------
PM MAIL WWW   Вверх
bsa
Дата 20.1.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



GrayCardinal, а х.з., если честно. Не пробовал smile

PM   Вверх
chaos
Дата 14.2.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 3
Всего: 44



есть еще xerces, кроссовый вроде как

Это сообщение отредактировал(а) chaos - 14.2.2007, 13:30
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1208 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.