亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? nxml.c

?? libnxml-no-curl-簡化版2007-07-01,一個別很不錯的XML生成和解析程序。
?? C
?? 第 1 頁 / 共 4 頁
字號:
//================================
// File:nxml.c
// Modfied by seeker
// 2007-007-01 15:29
//================================
#ifdef HAVE_CONFIG_H
#include <config.h>
#else
# error Use configure; make; make install
#endif

#include "nxml.h"
//#include "nxml_internal.h"

//************************************************************
// EASY FUNTION
//************************************************************
nxml_data_t *nxmle_root_element (nxml_t * nxml, nxml_error_t * err)
{
  nxml_data_t *root;
  nxml_error_t ret;

  ret = nxml_root_element (nxml, &root);
  if (err)
    *err = ret;

  if (ret != NXML_OK)
    return NULL;

  return root;
}
//---------------------------------
char *nxmle_find_attribute (nxml_data_t * data, char *name, nxml_error_t * err)
{
  nxml_attr_t *attribute;
  nxml_error_t ret;
  char *str;

  ret = nxml_find_attribute (data, name, &attribute);
  if (err)
    *err = ret;

  if (ret != NXML_OK)
    return NULL;

  if (!attribute)
    return NULL;

  str = strdup (attribute->value);
  if (!str)
  {
    if (err)
      *err = NXML_ERR_POSIX;
    return NULL;
  }

  return str;
}
//************************************************************
// EDIT FUNTION
//************************************************************
nxml_error_t nxml_root_element (nxml_t * nxml, nxml_data_t ** data)
{
  nxml_data_t *tmp;

  if (!data || !nxml)
    return NXML_ERR_DATA;

  tmp = nxml->data;
  while (tmp)
  {

    if (tmp->type == NXML_TYPE_ELEMENT)
      break;

    tmp = tmp->next;
  }

  *data = tmp;

  return NXML_OK;
}
//---------------------------------
nxml_error_t nxml_find_element (nxml_t * nxml, nxml_data_t * data, char *name,
                                nxml_data_t ** element)
{
  nxml_data_t *tmp;

  if (!nxml || !name || !element)
    return NXML_ERR_DATA;

  if (data && data->type != NXML_TYPE_ELEMENT)
  {
    *element = NULL;
    return NXML_OK;
  }

  if (data)
    tmp = data->children;
  else
    tmp = nxml->data;

  while (tmp)
  {
    if (tmp->type == NXML_TYPE_ELEMENT && !strcmp (tmp->value, name))
    {
      *element = tmp;
      return NXML_OK;
    }

    tmp = tmp->next;
  }

  *element = NULL;
  return NXML_OK;
}
//---------------------------------
nxml_error_t nxml_find_attribute (nxml_data_t * data, char *name, nxml_attr_t ** attribute)
{
  nxml_attr_t *tmp;

  if (!data || !name || !attribute)
    return NXML_ERR_DATA;

  if (data->type != NXML_TYPE_ELEMENT)
  {
    *attribute = NULL;
    return NXML_OK;
  }

  tmp = data->attributes;

  while (tmp)
  {
    if (!strcmp (tmp->name, name))
    {
      *attribute = tmp;
      return NXML_OK;
    }

    tmp = tmp->next;
  }

  *attribute = NULL;
  return NXML_OK;
}
//************************************************************
// INIT FUNTION
//************************************************************
nxml_error_t
nxml_new (nxml_t ** nxml)
{
  if (!nxml)
    return NXML_ERR_DATA;

  if (!(*nxml = (nxml_t *) malloc (sizeof (nxml_t))))
    return NXML_ERR_POSIX;

  memset (*nxml, 0, sizeof (nxml_t));

  return NXML_OK;
}
//************************************************************
// ERROR FUNTION
//************************************************************
char *
nxml_strerror (nxml_error_t err)
{
  switch (err)
  {
  case NXML_OK:
    return "Success";

  case NXML_ERR_PARSER:
    return "Parser error";

  case NXML_ERR_DATA:
    return "No correct paramenter in the function";

  default:
    return strerror (errno);
  }
}
//************************************************************
// NAMESPACE FUNTION
//************************************************************
struct __nxml_data_ns_t{  nxml_namespace_t *ns;  struct __nxml_data_ns_t *next;};static void__nxml_namespace_free_item (nxml_data_t * e){  nxml_namespace_t *ns;  nxml_data_t *child;  while (e->ns_list)  {    ns = e->ns_list->next;    if (e->ns_list->prefix)      free (e->ns_list->prefix);    if (e->ns_list->ns)      free (e->ns_list->ns);    free (e->ns_list);    e->ns_list = ns;  }  e->ns = NULL;  child = e->children;  while (child)  {    __nxml_namespace_free_item (child);    child = child->next;  }}//---------------------------------static void__nxml_namespace_free (nxml_t * nxml){  nxml_data_t *e;  e = nxml->data;  while (e)  {    __nxml_namespace_free_item (e);    e = e->next;  }}//---------------------------------int__nxml_namespace_parse_add (nxml_data_t * data, char *prefix, char *namespace){  nxml_namespace_t *ns;  if (!(ns = (nxml_namespace_t *) malloc (sizeof (nxml_namespace_t))))    return 1;  memset (ns, 0, sizeof (nxml_namespace_t));  if (prefix && !(ns->prefix = strdup (prefix)))  {    free (ns);    return 1;  }  if (!(ns->ns = strdup (namespace)))  {    if (ns->prefix)      free (ns->prefix);    free (ns);    return 1;  }  ns->next = data->ns_list;  data->ns_list = ns;  return 0;}//---------------------------------static int__nxml_namespace_find_item (nxml_t * nxml, nxml_data_t * e){  nxml_data_t *child;  nxml_attr_t *att;  att = e->attributes;  while (att)  {    if (!strcmp (att->name, "xmlns"))    {      if (__nxml_namespace_parse_add (e, NULL, att->value))      {        __nxml_namespace_free (nxml);        return 1;      }    }    else if (!strncmp (att->name, "xmlns:", 6))    {      if (__nxml_namespace_parse_add (e, att->name + 6, att->value))      {        __nxml_namespace_free (nxml);        return 1;      }    }    att = att->next;  }  child = e->children;  while (child)  {    if (child->type == NXML_TYPE_ELEMENT)      __nxml_namespace_find_item (nxml, child);    child = child->next;  }  return 0;}//---------------------------------static int__nxml_namespace_find (nxml_t * nxml){  nxml_data_t *e;  e = nxml->data;  while (e)  {    if (e->type == NXML_TYPE_ELEMENT)      __nxml_namespace_find_item (nxml, e);    e = e->next;  }  return 0;}//---------------------------------static void__nxml_namespace_associate_attribute (struct __nxml_data_ns_t *list,                                      nxml_attr_t * e){  int i;  int len = strlen (e->name);  int k;  for (i = k = 0; i < len; i++)    if (e->name[i] == ':')    {      k = i;      break;    }    if (!k)    {      while (list)      {        if (!list->ns->prefix)        {          e->ns = list->ns;          return;        }        list = list->next;      }      return;    }    else    {      while (list)      {        if (list->ns->prefix && !strncmp (list->ns->prefix, e->name, k))        {          char *a = strdup (e->name + strlen (list->ns->prefix) + 1);          if (!a)            return;          free (e->name);          e->name = a;          e->ns = list->ns;          return;        }        list = list->next;      }    }}//---------------------------------static void__nxml_namespace_associate_item (struct __nxml_data_ns_t *list,                                 nxml_data_t * e){  int i;  int len;  int k;  nxml_attr_t *attr;  attr = e->attributes;  while (attr)  {    __nxml_namespace_associate_attribute (list, attr);    attr = attr->next;  }  len = strlen (e->value);  for (i = k = 0; i < len; i++)    if (e->value[i] == ':')    {      k = i;      break;    }    if (!k)    {      while (list)      {        if (!list->ns->prefix)        {          e->ns = list->ns;          return;        }        list = list->next;      }      return;    }    else    {      while (list)      {        if (list->ns->prefix && !strncmp (list->ns->prefix, e->value, k))        {          char *a = strdup (e->value + strlen (list->ns->prefix) + 1);          if (!a)            return;          free (e->value);          e->value = a;          e->ns = list->ns;          return;        }        list = list->next;      }    }}//---------------------------------static void__nxml_namespace_associate (struct __nxml_data_ns_t **list,                            nxml_data_t * root){  nxml_data_t *e;  nxml_namespace_t *ns;  struct __nxml_data_ns_t *tmp, *old;  ns = root->ns_list;  while (ns)  {    if (!      (tmp =      (struct __nxml_data_ns_t *)      malloc (sizeof (struct __nxml_data_ns_t))))      return;    memset (tmp, 0, sizeof (struct __nxml_data_ns_t));    tmp->ns = ns;    tmp->next = (*list);    (*list) = tmp;    ns = ns->next;  }  __nxml_namespace_associate_item (*list, root);  e = root->children;  while (e)  {    if (e->type == NXML_TYPE_ELEMENT)      __nxml_namespace_associate (list, e);    e = e->next;  }  ns = root->ns_list;  while (ns)  {    tmp = *list;    old = NULL;    while (tmp)    {      if (tmp->ns == ns)      {        if (old)          old->next = tmp->next;        else          *list = tmp->next;        free (tmp);        break;      }      old = tmp;      tmp = tmp->next;    }    ns = ns->next;  }}//---------------------------------static void__nxml_namespace_connect (nxml_t * nxml){  nxml_data_t *e;  struct __nxml_data_ns_t *list = NULL;  e = nxml->data;  while (e)  {    if (e->type == NXML_TYPE_ELEMENT)      __nxml_namespace_associate (&list, e);    e = e->next;  }}void__nxml_namespace_parse (nxml_t * nxml){  __nxml_namespace_free (nxml);  if (__nxml_namespace_find (nxml))    return;  __nxml_namespace_connect (nxml);}

//************************************************************
// FREE FUNTION
//************************************************************
nxml_error_tnxml_free_data (nxml_data_t * data){  nxml_namespace_t *_namespace;  nxml_attr_t *attr;  nxml_data_t *tmp;  void *old;  if (!data)    return NXML_ERR_DATA;  if (data->value)    free (data->value);  _namespace = data->ns_list;  while (_namespace)  {    old = _namespace;    _namespace = _namespace->next;    nxml_free_namespace (old);  }  attr = data->attributes;  while (attr)  {    old = attr;    attr = attr->next;    nxml_free_attribute (old);  }  tmp = data->children;  while (tmp)  {    old = tmp;    tmp = tmp->next;    nxml_free_data (old);  }  free (data);  return NXML_OK;}//---------------------------------nxml_error_tnxml_free_attribute (nxml_attr_t * t){  if (!t)    return NXML_ERR_DATA;  if (t->name)    free (t->name);  if (t->value)    free (t->value);  free (t);  return NXML_OK;}//---------------------------------nxml_error_tnxml_free_namespace (nxml_namespace_t * t){  if (!t)    return NXML_ERR_DATA;  if (t->prefix)    free (t->prefix);  if (t->ns)    free (t->ns);  free (t);  return NXML_OK;}//---------------------------------nxml_error_tnxml_free_doctype (nxml_doctype_t * doctype){  nxml_doctype_t *tmp;  if (!doctype)    return NXML_ERR_DATA;  while (doctype)  {    nxml_empty_doctype (doctype);    if (doctype->value)      free (doctype->value);    if (doctype->name)      free (doctype->name);    tmp = doctype;    doctype = doctype->next;    free (tmp);  }  return NXML_OK;}//---------------------------------nxml_error_tnxml_empty_doctype (nxml_doctype_t * doctype){  if (!doctype)    return NXML_ERR_DATA;  while (doctype)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产免费久久综合| 91在线免费播放| 精品欧美乱码久久久久久1区2区| 久久一二三国产| 亚洲一卡二卡三卡四卡五卡| 蜜桃av一区二区三区| 色综合久久综合| 久久亚洲精华国产精华液 | 中文字幕免费观看一区| 亚洲图片欧美色图| 成人中文字幕电影| 精品粉嫩超白一线天av| 午夜精品视频在线观看| 91在线观看下载| 国产精品网站导航| 国产美女一区二区三区| 欧美日韩一区不卡| 一区二区在线免费观看| 成人av资源在线| 成人18精品视频| 极品少妇xxxx偷拍精品少妇| 欧洲视频一区二区| 亚洲欧洲精品一区二区精品久久久| 蜜臀91精品一区二区三区| 欧美一a一片一级一片| 国产精品网友自拍| 成人激情午夜影院| 国产精品对白交换视频 | 97超碰欧美中文字幕| 国产视频一区在线播放| 国产精品18久久久久久vr| 精品久久久久久无| 国内精品国产成人| ww久久中文字幕| 国产激情偷乱视频一区二区三区| 久久久亚洲国产美女国产盗摄 | 欧美猛男gaygay网站| 国产精品久久久久影院亚瑟| 国产综合久久久久影院| 久久久久久久久久美女| 国产激情一区二区三区四区| 国产亚洲婷婷免费| 国产91在线看| 亚洲同性同志一二三专区| 色悠悠亚洲一区二区| 老司机一区二区| 欧美一区二区三区在| 免费观看91视频大全| 欧美mv日韩mv国产网站| 国产成人一级电影| 中文字幕日韩av资源站| 欧美性猛交xxxxxxxx| 亚洲第一成年网| 精品99999| 不卡一区二区三区四区| 亚洲美女一区二区三区| 欧美高清dvd| 国产乱码字幕精品高清av| 国产精品国产三级国产有无不卡| 色综合久久久久| 蜜桃一区二区三区在线观看| 国产区在线观看成人精品| 91欧美一区二区| 丝袜诱惑亚洲看片| 国产婷婷精品av在线| 欧美影院午夜播放| 韩国女主播一区| 一区二区不卡在线播放| 26uuu国产在线精品一区二区| 9l国产精品久久久久麻豆| 亚洲va国产天堂va久久en| 久久久五月婷婷| 欧美日韩你懂得| 国产 欧美在线| 亚洲国产成人91porn| 国产午夜精品一区二区| 欧美日本视频在线| 成人av在线播放网站| 日韩二区三区在线观看| 成人av免费观看| 在线观看国产日韩| 激情六月婷婷久久| 亚洲精品乱码久久久久久日本蜜臀| 91官网在线免费观看| 国产呦精品一区二区三区网站| 国产精品久久久一区麻豆最新章节| 欧美私模裸体表演在线观看| 国产精品自拍一区| 日韩av一级片| 一区二区三区日本| 国产精品理论在线观看| 精品日本一线二线三线不卡| 色婷婷国产精品| 欧美一区二区性放荡片| 99视频精品在线| 国产麻豆精品一区二区| 日本不卡免费在线视频| 亚洲小说欧美激情另类| 午夜av一区二区三区| ww亚洲ww在线观看国产| 欧美精品在线一区二区| 欧美色老头old∨ideo| eeuss鲁一区二区三区| 国产福利一区二区三区视频| 奇米影视在线99精品| 亚洲一区二区三区四区不卡| 亚洲日本va午夜在线影院| 亚洲国产电影在线观看| 久久无码av三级| 久久久精品人体av艺术| 久久亚洲免费视频| 亚洲精品在线三区| 久久午夜免费电影| 久久综合九色综合97_久久久| 91麻豆精品国产91久久久久久久久| 欧美中文字幕一区| 欧美色综合久久| 91精品欧美一区二区三区综合在 | 久久色成人在线| 精品欧美黑人一区二区三区| 日韩免费视频线观看| 精品少妇一区二区三区免费观看| 日韩av一级片| 免费成人在线影院| 免费亚洲电影在线| 在线观看成人免费视频| 99久久精品免费观看| 成人h精品动漫一区二区三区| 国产a精品视频| 91天堂素人约啪| 欧美在线免费观看亚洲| 91精品蜜臀在线一区尤物| 欧美人与z0zoxxxx视频| 欧美一级久久久久久久大片| 精品88久久久久88久久久 | 欧美日韩免费高清一区色橹橹| 欧美性猛交xxxx乱大交退制版 | 久久国产三级精品| 国产成人精品www牛牛影视| 波多野结衣精品在线| 欧美在线free| 日韩欧美你懂的| 国产精品麻豆视频| 久久久精品影视| 日一区二区三区| 国产一区二区三区在线观看精品| 国产一区二区免费视频| 99r精品视频| 欧美私人免费视频| 久久色中文字幕| 一区二区三区在线不卡| 日本欧美在线看| 97se狠狠狠综合亚洲狠狠| 制服视频三区第一页精品| 久久久精品欧美丰满| 亚洲一区二区三区在线| 久久精品国产一区二区| 日本乱码高清不卡字幕| 26uuu另类欧美| 一二三四区精品视频| 国产一区二区毛片| 欧美日韩精品欧美日韩精品一| 国产欧美日韩三区| 婷婷开心激情综合| 91视频91自| 久久综合久久久久88| 性感美女久久精品| 成人黄色电影在线| 亚洲私人黄色宅男| 欧美日韩视频在线第一区| 久久久久久夜精品精品免费| 一区二区在线看| 粉嫩13p一区二区三区| 日韩一级高清毛片| 亚洲欧美日韩中文播放| 国产盗摄一区二区三区| 日韩一区二区三区电影在线观看| 一区二区三区高清| 成人午夜短视频| 91精品综合久久久久久| 亚洲一区成人在线| 色综合久久综合中文综合网| 国产精品不卡一区| 成人一区二区三区视频在线观看| 精品国产123| 经典三级在线一区| 日韩欧美www| 精品午夜一区二区三区在线观看| 欧美一区二区日韩一区二区| 亚洲第一成人在线| 色综合天天综合在线视频| 国产精品三级久久久久三级| 精品一区二区三区在线播放视频| 日韩亚洲欧美在线| 首页国产欧美日韩丝袜| 91精品国产一区二区| 久久久精品国产99久久精品芒果| 成人va在线观看| 久久你懂得1024| 国产曰批免费观看久久久|