The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"XML разбор параметров на Си"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"XML разбор параметров на Си"  +/
Сообщение от ap email(??) on 12-Июн-06, 21:03 
Есть ли средства для разбора параметров тегов XML на языке Си? Как это лучше всего сделать?
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "XML разбор параметров на Си"  +/
Сообщение от chip email(ok) on 12-Июн-06, 21:38 
>Есть ли средства для разбора параметров тегов XML на языке Си? Как
>это лучше всего сделать?

libxml2?


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "XML разбор параметров на Си"  +/
Сообщение от ap email(??) on 13-Июн-06, 10:09 
>>Есть ли средства для разбора параметров тегов XML на языке Си? Как
>>это лучше всего сделать?
>
>libxml2?

Помогите пожалуйста со следующей задачей (я новичек в XML):
есть следующий фрагмент XML-кода:

<request>
<header action=”payment” dealer=”mCash”/>
<account service=”0” id=”Иванов Иван” id2=”123456879” id3=”” id4=”” />
<operation id=”7456646” sum=”9.45” point=”350” check=”17235”/>
</request>

Мне нужно на Си (в Linux) прочитать параметры action,dealer,account service,id,operation id итд. Можете привести небольшой примерчик с использованием библиотеки libxml2?

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "XML разбор параметров на Си"  +/
Сообщение от guest (??) on 14-Июн-06, 02:31 

>Можете привести небольшой примерчик с использованием библиотеки libxml2?
да запросто:
/usr/share/doc/libxml2-<version>/examples/
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "XML разбор параметров на Си"  +/
Сообщение от ap email(??) on 20-Июн-06, 09:35 
>>>Есть ли средства для разбора параметров тегов XML на языке Си? Как
>>>это лучше всего сделать?
>>
>>libxml2?
>
>Помогите пожалуйста со следующей задачей (я новичек в XML):
>есть следующий фрагмент XML-кода:
>
><request>
><header action=”payment” dealer=”mCash”/>
><account service=”0” id=”Иванов Иван” id2=”123456879” id3=”” id4=”” />
><operation id=”7456646” sum=”9.45” point=”350” check=”17235”/>
></request>
>
>Мне нужно на Си (в Linux) прочитать параметры action,dealer,account service,id,operation id итд.
>Можете привести небольшой примерчик с использованием библиотеки libxml2?

Никто не может привести премер для данного случая? Я много примеров из документации видел, но пока малопонятно (с xml раньше вообще не работал).

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "XML разбор параметров на Си"  +/
Сообщение от DeadMustdie email(??) on 18-Июн-06, 23:57 
>Есть ли средства для разбора параметров тегов XML на языке Си? Как
>это лучше всего сделать?

libxml2 тоже ничего, но я как-то больже expat уважаю.
http://expat.sourceforge.net/

Единственно что придется немножко поплясать для обработки
всяких разных кодировок. man 3 iconv

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "XML разбор параметров на Си"  +/
Сообщение от ap email(??) on 20-Июн-06, 13:09 
>>Есть ли средства для разбора параметров тегов XML на языке Си? Как
>>это лучше всего сделать?
>
>libxml2 тоже ничего, но я как-то больже expat уважаю.
>http://expat.sourceforge.net/
>
>Единственно что придется немножко поплясать для обработки
>всяких разных кодировок. man 3 iconv
Никто не может привести премер для данного случая? Я много примеров из документации видел, но пока малопонятно (с xml раньше вообще не работал).

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "XML разбор параметров на Си"  +/
Сообщение от DeadMustdie email(??) on 21-Июн-06, 18:41 
>Никто не может привести премер для данного случая? Я много примеров из
>документации видел, но пока малопонятно (с xml раньше вообще не работал).

Понятнее, чем в семплах, вряд ли будет.

Собственно, семпл, печатает элементы XML-документа:

#include <stdio.h>
#include "expat.h"

static void XMLCALL
startElement(void *userData, const char *name, const char **atts)
{
  int i;
  int *depthPtr = userData;
  for (i = 0; i < *depthPtr; i++)
    putchar('\t');
  puts(name);
  *depthPtr += 1;
}

static void XMLCALL
endElement(void *userData, const char *name)
{
  int *depthPtr = userData;
  *depthPtr -= 1;
}

int
main(int argc, char *argv[])
{
  char buf[BUFSIZ];
  XML_Parser parser = XML_ParserCreate(NULL);
  int done;
  int depth = 0;
  XML_SetUserData(parser, &depth);
  XML_SetElementHandler(parser, startElement, endElement);
  do {
    size_t len = fread(buf, 1, sizeof(buf), stdin);
    done = len < sizeof(buf);
    if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) {
      fprintf(stderr,
              "%s at line %d\n",
              XML_ErrorString(XML_GetErrorCode(parser)),
              XML_GetCurrentLineNumber(parser));
      return 1;
    }
  } while (!done);
  XML_ParserFree(parser);
  return 0;
}

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "XML разбор параметров на Си"  +/
Сообщение от Steck (??) on 27-Июн-06, 03:54 
>>Никто не может привести премер для данного случая? Я много примеров из
>>документации видел, но пока малопонятно (с xml раньше вообще не работал).

#include <stdio.h>
#include <libxml/parser.h>
#define CONF "/home/steck/file.xml"

int main(int argc, char *argv[])
{
xmlNodePtr cur;
xmlDocPtr doc;

doc = xmlParseFile(CONF);
  if(doc == NULL)
  {
    fprintf(stderr,"Error parsing file\n");
    return -1;
  }
  cur = xmlDocGetRootElement(doc);
  if(xmlStrcmp(cur->name,(const xmlChar *)"request"))
    return -1;
  cur = cur->xmlChildrenNode;
  while(cur != NULL)
  {
      if((!xmlStrcmp(cur->name,(const xmlChar *)"header")))
            {
                    printf("Section \"header\"\n");
                    printf("action = %s\n",xmlGetProp(cur,"action"));
                    printf("dealer = %s\n",xmlGetProp(cur,"dealer"));
            }
             if((!xmlStrcmp(cur->name,(const xmlChar *)"account")))
        {
                    printf("Section \"account\"\n");
                printf("service = %s\n",xmlGetProp(cur,"service"));
                printf("id = %s\n",xmlGetProp(cur,"id"));
                printf("id2 = %s\n",xmlGetProp(cur,"id2"));
                printf("id3 = %s\n",xmlGetProp(cur,"id3"));
                printf("id4 = %s\n",xmlGetProp(cur,"id4"));
                        
        }
                if((!xmlStrcmp(cur->name,(const xmlChar *)"operation")))
                {
                    printf("Section \"Operation\"\n");

                    printf("id = %s\n",xmlGetProp(cur,"id"));
                    printf("sum = %s\n",xmlGetProp(cur,"sum"));
                    printf("point = %s\n",xmlGetProp(cur,"point"));
                    printf("check = %s\n",xmlGetProp(cur,"check"));
                }
                cur = cur->next;
    }
    }

Держи
Может поможет..

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "XML разбор параметров на Си"  +/
Сообщение от ap (??) on 26-Июл-06, 13:46 
>>>Никто не может привести премер для данного случая? Я много примеров из
>>>документации видел, но пока малопонятно (с xml раньше вообще не работал).
>
>
>
>#include <stdio.h>
>#include <libxml/parser.h>
>#define CONF "/home/steck/file.xml"
>
>int main(int argc, char *argv[])
>{
>xmlNodePtr cur;
>xmlDocPtr doc;
>
> doc = xmlParseFile(CONF);
>  if(doc == NULL)
>  {
>    fprintf(stderr,"Error parsing file\n");
>    return -1;
>  }
>  cur = xmlDocGetRootElement(doc);
>  if(xmlStrcmp(cur->name,(const xmlChar *)"request"))
>    return -1;
>  cur = cur->xmlChildrenNode;
>  while(cur != NULL)
>  {
>      if((!xmlStrcmp(cur->name,(const xmlChar *)"header")))
>   {
>     printf("Section \"header\"\n");
>     printf("action = %s\n",xmlGetProp(cur,"action"));
>     printf("dealer = %s\n",xmlGetProp(cur,"dealer"));
>   }
>             if((!xmlStrcmp(cur->name,(const xmlChar *)"account")))
>        {
>     printf("Section \"account\"\n");
>    printf("service = %s\n",xmlGetProp(cur,"service"));
>    printf("id = %s\n",xmlGetProp(cur,"id"));
>    printf("id2 = %s\n",xmlGetProp(cur,"id2"));
>    printf("id3 = %s\n",xmlGetProp(cur,"id3"));
>    printf("id4 = %s\n",xmlGetProp(cur,"id4"));
>
>        }
>                if((!xmlStrcmp(cur->name,(const xmlChar *)"operation")))
>    {
>     printf("Section \"Operation\"\n");
>
>     printf("id = %s\n",xmlGetProp(cur,"id"));
>     printf("sum = %s\n",xmlGetProp(cur,"sum"));
>     printf("point = %s\n",xmlGetProp(cur,"point"));
>     printf("check = %s\n",xmlGetProp(cur,"check"));
>    }
>                cur = cur->next;
> }
> }
>
>Держи
>Может поможет..

Какие библитеки для этого необходимы, не находит путь к parser.h.
Установил libxml2, libxml2-devel. Как правильно указать путь к библеотекам? Пробовал как в примери и так: #include </usr/include/libxml2/parser.h>. Выдает:
make
g++ -g -mpentium -I/usr/local/pgsql/include -L/usr/local/pgsql/lib -lpq -L/usr/lib -lstdc++  xml.cpp -o  xml
xml.cpp:3:41: /usr/include/libxml2/parser.h: No such file or directory
xml.cpp: In function `int main(int, char**)':
xml.cpp:8: error: `xmlNodePtr' undeclared (first use this function)
итд.
Заранее спасибо.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "XML разбор параметров на Си"  +/
Сообщение от ap (??) on 26-Июл-06, 13:51 
Исправил путь на /usr/include/libxml2/libxml/. Теперь выдает кучу ошибок.
/usr/include/libxml2/libxml/parser.h:15:31: libxml/xmlversion.h: No such file or directory
/usr/include/libxml2/libxml/parser.h:16:25: libxml/tree.h: No such file or directory
/usr/include/libxml2/libxml/parser.h:17:25: libxml/dict.h: No such file or directory
/usr/include/libxml2/libxml/parser.h:18:25: libxml/hash.h: No such file or directory
/usr/include/libxml2/libxml/parser.h:19:26: libxml/valid.h: No such file or directory
/usr/include/libxml2/libxml/parser.h:20:29: libxml/entities.h: No such file or directory
/usr/include/libxml2/libxml/parser.h:21:29: libxml/xmlerror.h: No such file or directory
/usr/include/libxml2/libxml/parser.h:22:30: libxml/xmlstring.h: No such file or directory
In file included from xml.cpp:3:
/usr/include/libxml2/libxml/parser.h:52: error: typedef `xmlParserInputDeallocate' is initialized (use __typeof__ instead)
/usr/include/libxml2/libxml/parser.h:52: error: `xmlChar' was not declared in this scope
/usr/include/libxml2/libxml/parser.h:52: error: `str' was not declared in this scope
итд.
Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "XML разбор параметров на Си"  +/
Сообщение от ap (??) on 26-Июл-06, 15:18 
>Исправил путь на /usr/include/libxml2/libxml/. Теперь выдает кучу ошибок.
>/usr/include/libxml2/libxml/parser.h:15:31: libxml/xmlversion.h: No such file or directory
>/usr/include/libxml2/libxml/parser.h:16:25: libxml/tree.h: No such file or directory
>/usr/include/libxml2/libxml/parser.h:17:25: libxml/dict.h: No such file or directory
>/usr/include/libxml2/libxml/parser.h:18:25: libxml/hash.h: No such file or directory
>/usr/include/libxml2/libxml/parser.h:19:26: libxml/valid.h: No such file or directory
>/usr/include/libxml2/libxml/parser.h:20:29: libxml/entities.h: No such file or directory
>/usr/include/libxml2/libxml/parser.h:21:29: libxml/xmlerror.h: No such file or directory
>/usr/include/libxml2/libxml/parser.h:22:30: libxml/xmlstring.h: No such file or directory
>In file included from xml.cpp:3:
>/usr/include/libxml2/libxml/parser.h:52: error: typedef `xmlParserInputDeallocate' is initialized (use __typeof__ instead)
>/usr/include/libxml2/libxml/parser.h:52: error: `xmlChar' was not declared in this scope
>/usr/include/libxml2/libxml/parser.h:52: error: `str' was not declared in this scope
>итд.
Теперь выдает:
xml.cpp:26: error: invalid conversion from `const char*' to `const xmlChar*'
xml.cpp:26: error:   initializing argument 2 of `xmlChar* xmlGetProp(xmlNode*, const xmlChar*)'
xml.cpp:27: error: invalid conversion from `const char*' to `const xmlChar*'
xml.cpp:27: error:   initializing argument 2 of `xmlChar* xmlGetProp(xmlNode*, const xmlChar*)'
xml.cpp:32: error: invalid conversion from `const char*' to `const xmlChar*'
xml.cpp:32: error:   initializing argument 2 of `xmlChar* xmlGetProp(xmlNode*, const xmlChar*)'
xml.cpp:33: error: invalid conversion from `const char*' to `const xmlChar*'
xml.cpp:33: error:   initializing argument 2 of `xmlChar* xmlGetProp(xmlNode*, const xmlChar*)'
xml.cpp:34: error: invalid conversion from `const char*' to `const xmlChar*'
xml.cpp:34: error:   initializing argument 2 of `xmlChar* xmlGetProp(xmlNode*, const xmlChar*)'
xml.cpp:35: error: invalid conversion from `const char*' to `const xmlChar*'
xml.cpp:35: error:   initializing argument 2 of `xmlChar* xmlGetProp(xmlNode*, const xmlChar*)'
xml.cpp:36: error: invalid conversion from `const char*' to `const xmlChar*'
xml.cpp:36: error:   initializing argument 2 of `xmlChar* xmlGetProp(xmlNode*, const xmlChar*)'
xml.cpp:42: error: invalid conversion from `const char*' to `const xmlChar*'
xml.cpp:42: error:   initializing argument 2 of `xmlChar* xmlGetProp(xmlNode*, const xmlChar*)'
xml.cpp:43: error: invalid conversion from `const char*' to `const xmlChar*'
xml.cpp:43: error:   initializing argument 2 of `xmlChar* xmlGetProp(xmlNode*, const xmlChar*)'
xml.cpp:44: error: invalid conversion from `const char*' to `const xmlChar*'
xml.cpp:44: error:   initializing argument 2 of `xmlChar* xmlGetProp(xmlNode*, const xmlChar*)'
xml.cpp:45: error: invalid conversion from `const char*' to `const xmlChar*'
xml.cpp:45: error:   initializing argument 2 of `xmlChar* xmlGetProp(xmlNode*, const xmlChar*)'
xml.cpp:49:4: warning: no newline at end of file
make: *** [default] Error 1

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "XML разбор параметров на Си"  +/
Сообщение от Steck (??) on 29-Июл-06, 08:05 
вместо g++
gcc `xml2-config --cflags --libs` xml.c -o xml

P.S Код писался на и проверялся на freebsd6.0 6.1

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "XML разбор параметров на Си"  +/
Сообщение от ap (??) on 29-Июл-06, 10:40 
>вместо g++
>gcc `xml2-config --cflags --libs` xml.c -o xml
>
>P.S Код писался на и проверялся на freebsd6.0 6.1

Большое спасибо за код. В компилировании уже разобрался.

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру