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

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

?? mxml-node.c

?? minixml2.5最新的版本。 嵌入式xml 解析、查找、生成、遍歷 功能,全部實現是標準c,移植很容易。 最新的2.5
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * "$Id: mxml-node.c 270 2007-04-23 21:48:03Z mike $" * * Node support code for Mini-XML, a small XML-like file parsing library. * * Copyright 2003-2007 by Michael Sweet. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * Contents: * *   mxmlAdd()        - Add a node to a tree. *   mxmlDelete()     - Delete a node and all of its children. *   mxmlNewCDATA()   - Create a new CDATA node. *   mxmlNewCustom()  - Create a new custom data node. *   mxmlNewElement() - Create a new element node. *   mxmlNewInteger() - Create a new integer node. *   mxmlNewOpaque()  - Create a new opaque string. *   mxmlNewReal()    - Create a new real number node. *   mxmlNewText()    - Create a new text fragment node. *   mxmlNewTextf()   - Create a new formatted text fragment node. *   mxmlNewXML()     - Create a new XML document tree. *   mxmlRelease()    - Release a node. *   mxmlRemove()     - Remove a node from its parent. *   mxmlRetain()     - Retain a node. *   mxml_new()       - Create a new node. *//* * Include necessary headers... */#include "config.h"#include "mxml.h"/* * Local functions... */static mxml_node_t	*mxml_new(mxml_node_t *parent, mxml_type_t type);/* * 'mxmlAdd()' - Add a node to a tree. * * Adds the specified node to the parent. If the child argument is not * NULL, puts the new node before or after the specified child depending * on the value of the where argument. If the child argument is NULL, * puts the new node at the beginning of the child list (MXML_ADD_BEFORE) * or at the end of the child list (MXML_ADD_AFTER). The constant * MXML_ADD_TO_PARENT can be used to specify a NULL child pointer. */voidmxmlAdd(mxml_node_t *parent,		/* I - Parent node */        int         where,		/* I - Where to add, MXML_ADD_BEFORE or MXML_ADD_AFTER */        mxml_node_t *child,		/* I - Child node for where or MXML_ADD_TO_PARENT */	mxml_node_t *node)		/* I - Node to add */{#ifdef DEBUG  fprintf(stderr, "mxmlAdd(parent=%p, where=%d, child=%p, node=%p)\n", parent,          where, child, node);#endif /* DEBUG */ /*  * Range check input...  */  if (!parent || !node)    return;#if DEBUG > 1  fprintf(stderr, "    BEFORE: node->parent=%p\n", node->parent);  if (parent)  {    fprintf(stderr, "    BEFORE: parent->child=%p\n", parent->child);    fprintf(stderr, "    BEFORE: parent->last_child=%p\n", parent->last_child);    fprintf(stderr, "    BEFORE: parent->prev=%p\n", parent->prev);    fprintf(stderr, "    BEFORE: parent->next=%p\n", parent->next);  }#endif /* DEBUG > 1 */ /*  * Remove the node from any existing parent...  */  if (node->parent)    mxmlRemove(node); /*  * Reset pointers...  */  node->parent = parent;  switch (where)  {    case MXML_ADD_BEFORE :        if (!child || child == parent->child || child->parent != parent)	{	 /*	  * Insert as first node under parent...	  */	  node->next = parent->child;	  if (parent->child)	    parent->child->prev = node;	  else	    parent->last_child = node;	  parent->child = node;	}	else	{	 /*	  * Insert node before this child...	  */	  node->next = child;	  node->prev = child->prev;	  if (child->prev)	    child->prev->next = node;	  else	    parent->child = node;	  child->prev = node;	}        break;    case MXML_ADD_AFTER :        if (!child || child == parent->last_child || child->parent != parent)	{	 /*	  * Insert as last node under parent...	  */	  node->parent = parent;	  node->prev   = parent->last_child;	  if (parent->last_child)	    parent->last_child->next = node;	  else	    parent->child = node;	  parent->last_child = node;        }	else	{	 /*	  * Insert node after this child...	  */	  node->prev = child;	  node->next = child->next;	  if (child->next)	    child->next->prev = node;	  else	    parent->last_child = node;	  child->next = node;	}        break;  }#if DEBUG > 1  fprintf(stderr, "    AFTER: node->parent=%p\n", node->parent);  if (parent)  {    fprintf(stderr, "    AFTER: parent->child=%p\n", parent->child);    fprintf(stderr, "    AFTER: parent->last_child=%p\n", parent->last_child);    fprintf(stderr, "    AFTER: parent->prev=%p\n", parent->prev);    fprintf(stderr, "    AFTER: parent->next=%p\n", parent->next);  }#endif /* DEBUG > 1 */}/* * 'mxmlDelete()' - Delete a node and all of its children. * * If the specified node has a parent, this function first removes the * node from its parent using the mxmlRemove() function. */voidmxmlDelete(mxml_node_t *node)		/* I - Node to delete */{  int	i;				/* Looping var */#ifdef DEBUG  fprintf(stderr, "mxmlDelete(node=%p)\n", node);#endif /* DEBUG */ /*  * Range check input...  */  if (!node)    return; /*  * Remove the node from its parent, if any...  */  mxmlRemove(node); /*  * Delete children...  */  while (node->child)    mxmlDelete(node->child); /*  * Now delete any node data...  */  switch (node->type)  {    case MXML_ELEMENT :        if (node->value.element.name)	  free(node->value.element.name);	if (node->value.element.num_attrs)	{	  for (i = 0; i < node->value.element.num_attrs; i ++)	  {	    if (node->value.element.attrs[i].name)	      free(node->value.element.attrs[i].name);	    if (node->value.element.attrs[i].value)	      free(node->value.element.attrs[i].value);	  }          free(node->value.element.attrs);	}        break;    case MXML_INTEGER :       /* Nothing to do */        break;    case MXML_OPAQUE :        if (node->value.opaque)	  free(node->value.opaque);        break;    case MXML_REAL :       /* Nothing to do */        break;    case MXML_TEXT :        if (node->value.text.string)	  free(node->value.text.string);        break;    case MXML_CUSTOM :        if (node->value.custom.data &&	    node->value.custom.destroy)	  (*(node->value.custom.destroy))(node->value.custom.data);	break;    default :        break;  } /*  * Free this node...  */  free(node);}/* * 'mxmlNewCDATA()' - Create a new CDATA node. * * The new CDATA node is added to the end of the specified parent's child * list. The constant MXML_NO_PARENT can be used to specify that the new * CDATA node has no parent. The data string must be nul-terminated and * is copied into the new node. CDATA nodes use the MXML_ELEMENT type. * * @since Mini-XML 2.3@ */mxml_node_t *				/* O - New node */mxmlNewCDATA(mxml_node_t *parent,	/* I - Parent node or MXML_NO_PARENT */	     const char  *data)		/* I - Data string */{  mxml_node_t	*node;			/* New node */#ifdef DEBUG  fprintf(stderr, "mxmlNewCDATA(parent=%p, data=\"%s\")\n",          parent, data ? data : "(null)");#endif /* DEBUG */ /*  * Range check input...  */  if (!data)    return (NULL); /*  * Create the node and set the name value...  */  if ((node = mxml_new(parent, MXML_ELEMENT)) != NULL)    node->value.element.name = _mxml_strdupf("![CDATA[%s]]", data);  return (node);}/* * 'mxmlNewCustom()' - Create a new custom data node. * * The new custom node is added to the end of the specified parent's child * list. The constant MXML_NO_PARENT can be used to specify that the new * element node has no parent. NULL can be passed when the data in the * node is not dynamically allocated or is separately managed. * * @since Mini-XML 2.1@ */mxml_node_t *				/* O - New node */mxmlNewCustom(    mxml_node_t              *parent,	/* I - Parent node or MXML_NO_PARENT */    void                     *data,	/* I - Pointer to data */    mxml_custom_destroy_cb_t destroy)	/* I - Function to destroy data */{  mxml_node_t	*node;			/* New node */#ifdef DEBUG  fprintf(stderr, "mxmlNewCustom(parent=%p, data=%p, destroy=%p)\n", parent,          data, destroy);#endif /* DEBUG */ /*  * Create the node and set the value...  */  if ((node = mxml_new(parent, MXML_CUSTOM)) != NULL)  {    node->value.custom.data    = data;    node->value.custom.destroy = destroy;  }  return (node);}/* * 'mxmlNewElement()' - Create a new element node. * * The new element node is added to the end of the specified parent's child * list. The constant MXML_NO_PARENT can be used to specify that the new * element node has no parent. */mxml_node_t *				/* O - New node */mxmlNewElement(mxml_node_t *parent,	/* I - Parent node or MXML_NO_PARENT */               const char  *name)	/* I - Name of element */{  mxml_node_t	*node;			/* New node */#ifdef DEBUG  fprintf(stderr, "mxmlNewElement(parent=%p, name=\"%s\")\n", parent,          name ? name : "(null)");#endif /* DEBUG */ /*  * Range check input...  */  if (!name)    return (NULL); /*  * Create the node and set the element name...  */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品伦理在线| 欧美一区二区视频免费观看| 色婷婷综合五月| 精品久久人人做人人爱| 一区二区三区四区中文字幕| 国产尤物一区二区| 欧美日韩亚洲综合在线| 精品日本一线二线三线不卡| 亚洲一区二区免费视频| 国产一区视频网站| 91精品国产综合久久精品麻豆| 日韩一区中文字幕| 国产91高潮流白浆在线麻豆 | 日本在线不卡视频| 在线亚洲人成电影网站色www| 亚洲精品一区二区三区在线观看 | 国产精品自拍一区| 日韩一区二区三区三四区视频在线观看| 亚洲日本欧美天堂| 成人国产精品视频| 国产精品欧美一区二区三区| 国产精品白丝av| 国产亚洲一区二区三区四区| 久久99热这里只有精品| 欧美一区二区三区男人的天堂| 亚洲国产日韩一区二区| 在线免费不卡电影| 亚洲综合久久久久| 色综合欧美在线| 中文字幕一区二区三区四区不卡| 国产伦理精品不卡| 精品国产三级电影在线观看| 日韩成人免费看| 欧美一区二区三区在线观看| 秋霞影院一区二区| 91精品国产综合久久久久久漫画| 亚洲一区二区中文在线| 欧美三级电影在线观看| 亚洲成人动漫在线观看| 欧美日韩国产123区| 天天射综合影视| 在线这里只有精品| 亚洲视频在线观看三级| 欧美特级限制片免费在线观看| 有码一区二区三区| 欧美亚洲综合一区| 日韩综合一区二区| 日韩精品一区二区三区中文精品| 精品一区二区三区免费视频| 久久久久久久久99精品| 成人精品gif动图一区| 亚洲免费观看高清在线观看| 91老师片黄在线观看| 一区二区三区美女视频| 日韩一区二区电影在线| 国产精品一区二区无线| 亚洲欧美一区二区久久 | 不卡的电影网站| 午夜久久久久久久久| 欧美嫩在线观看| 久久国产精品99久久久久久老狼| 91日韩在线专区| 色婷婷国产精品| 一区二区三区中文字幕| 91麻豆精品国产自产在线| 1区2区3区欧美| 日韩欧美综合在线| 91在线视频播放地址| 日韩精品电影一区亚洲| 国产亚洲欧美激情| 欧美日韩美少妇| 成人精品高清在线| 美洲天堂一区二卡三卡四卡视频| 欧美大片日本大片免费观看| 99久久久久免费精品国产| 久久精品久久综合| 亚洲一区影音先锋| 中文字幕一区二区日韩精品绯色| 欧美精品一二三| 成+人+亚洲+综合天堂| 久久精品国产澳门| 亚洲国产毛片aaaaa无费看| 国产清纯美女被跳蛋高潮一区二区久久w| 91麻豆123| 成人免费黄色在线| 韩国毛片一区二区三区| 亚洲一区二区欧美| 日韩美女久久久| 欧美国产精品专区| 精品国产一二三| 91精品国产品国语在线不卡| 在线免费一区三区| 99久久久免费精品国产一区二区| 国产一区二区三区黄视频| 久久精品免视看| 制服.丝袜.亚洲.另类.中文| 在线观看欧美精品| 91麻豆国产精品久久| 成人激情开心网| 国产美女精品人人做人人爽| 美女一区二区三区在线观看| 同产精品九九九| 图片区小说区国产精品视频| 亚洲成a人片在线不卡一二三区| 亚洲欧洲精品成人久久奇米网| 国产午夜精品久久久久久免费视 | 久久这里只有精品6| 欧美群妇大交群中文字幕| 色综合久久综合网| 欧美在线观看视频在线| 国产成人精品一区二区三区四区| 另类欧美日韩国产在线| 蜜臀精品一区二区三区在线观看| 亚洲天堂成人在线观看| 亚洲欧洲日韩在线| 国产欧美日韩不卡免费| 国产片一区二区| 国产精品久久久久一区| 国产精品高潮呻吟| 依依成人精品视频| 天天色天天操综合| 另类小说色综合网站| 日韩精品一二三| 久久er99热精品一区二区| 国产麻豆精品95视频| 成人成人成人在线视频| 色综合色综合色综合色综合色综合| 色综合天天狠狠| 91精选在线观看| 国产亚洲欧美中文| 日韩一区中文字幕| 五月激情丁香一区二区三区| 狠狠色2019综合网| 成人网在线播放| 欧美色图12p| 日韩精品专区在线影院重磅| 日本一区二区电影| 一区二区久久久久| 蜜桃av一区二区在线观看 | 国产精品网站在线观看| 一区二区三区日韩精品视频| 日韩精品电影一区亚洲| 国产.欧美.日韩| 欧美性猛片aaaaaaa做受| 精品国产人成亚洲区| 亚洲人成在线观看一区二区| 同产精品九九九| 成人国产亚洲欧美成人综合网| 欧美日韩精品一区二区在线播放| 久久众筹精品私拍模特| 亚洲精品免费在线播放| 蜜桃av噜噜一区二区三区小说| 成人a免费在线看| 正在播放亚洲一区| 日本一区二区视频在线| 婷婷久久综合九色综合伊人色| 国内精品国产三级国产a久久| 色综合久久久久久久久久久| 精品久久五月天| 亚洲电影一区二区| 不卡一卡二卡三乱码免费网站| 欧美精品久久久久久久久老牛影院| 中文字幕高清不卡| 麻豆久久久久久久| 欧美三区在线观看| 国产精品成人在线观看| 久99久精品视频免费观看| 欧美午夜电影网| 中文子幕无线码一区tr| 美女看a上一区| 欧美午夜电影在线播放| 亚洲欧美中日韩| 国产精品亚洲视频| 日韩欧美在线一区二区三区| 一区二区三区在线播| av午夜精品一区二区三区| 久久天堂av综合合色蜜桃网| 日本伊人精品一区二区三区观看方式| 91在线视频18| 国产精品国产三级国产普通话99| 精品一区二区三区视频在线观看| 欧美日韩国产区一| 亚洲国产成人porn| 在线视频一区二区三区| 国产精品高潮久久久久无| 国产精品99久久久久久宅男| 久久综合色天天久久综合图片| 天天影视色香欲综合网老头| 91麻豆蜜桃一区二区三区| 国产精品初高中害羞小美女文| 成人免费看黄yyy456| 精品国免费一区二区三区| 日韩高清在线一区| 日韩欧美你懂的| 久久国产剧场电影| 精品国偷自产国产一区| 国产一区二区三区香蕉| 国产亚洲自拍一区| 国产精品一色哟哟哟| 国产欧美精品一区二区色综合|