ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:35.08KB ,
资源ID:4764847      下载积分:5 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4764847.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(操作系统日志配置方法.docx)为本站上传会员【二***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

操作系统日志配置方法.docx

1、操作系统日志配置方法AIX、Linux和Solaris操作系统日志接入 1 .采用Root帐号登陆目标系统 2 .查看/etc/syslog.conf文件已经成功添加以下内容 *.err @采集机IP地址 (中间以Tab健分割) auth.info@采集机IP地址 (中间以Tab健分割).用下面的命令停止syslog服务 /etc/init.d/syslog stop 3 .用下面的命令启动syslog服务 /etc/init.d/syslog startHP UNIX 1 .在Unix系统/etc/syslog.conf文件最后追加以下2行*.err @采集机IP地址 (中间以Ta

2、b健分割) auth.info@采集机IP地址 (中间以Tab健分割).用下面的命令停止syslog服务 Kill -9 syslogd.用下面的命令启动syslog服务 /usr/sbin/syslogdWindows操作系统日志接入 Windows操作系统需要安装日志采集程序。安装完成以后进行如下配置: 修改配置文件:SEMCollectCfg.xml ,默认安装时位于C:\Program Files\iS-One\SEMCollector\conf 目录下。 修改一下红色标记内容: 调用xmlFreeNode或者xmlFreeNodeList来释放动态分配

3、的节点 内存,除非你把该节点从文档中移除了。一般来说,一个文档中所有 节点都应该动态分配,然后加入文档,最后调用xmlFreeDoc一次 释放所有节点申请的动态内存,这也是为什么我们很少看见 xmlNodeFree 的原因。 xmlSaveFile将文档以默认方式存入一个文件。 xmlSaveFormatFileEnc可将文档以某种编码/格式存入一个 文件中。 5)节点类型 xmlNode、指针 xmlNodePtr 节点应该是xml中最重要的元素了,xmlNode代表了 xml文档 中的一个节点,实现为一个struct,内容很丰富:tree.h typedef struct _xm

4、lNode xmlNode; typedef xmlNode *xmlNodePtr; struct _xmlNode {void *_private;/* application data */ xmlElementType type; /* type number, must be second ! */ const xmlChar *name; /* the name of the node, or the entity */struct _xmlNode *children; /* parent->childs link */ struct _xmlNode *last; /

5、 last child link */struct _xmlNode "parent;/* child->parent link */ struct _xmlNode *next; /* next sibling link */ struct _xmlNode *prev; /* previous sibling link */ struct _xmlDoc *doc;/* the containing document *//* End of common part */ xmlNs *ns; /* pointer to the associated namespace */xmlC

6、har *content; /* the content */ struct _xmlAttr "properties;/* properties list */ xmlNs *nsDef; /* namespace definitions on this node */void*psvi;/* for type/PSVI informations */ unsigned short line; /* line number */ unsigned short extra; /* extra data for XPath/XSLT */ }; 可以看到,节点之间是以链表和树两种方式

7、同时组织起来的, next和prev指针可以组成链表,而parent和children可以组织 为树。同时还有以下重要元素: • 节点中的文字内容:content; • 节点所属文档:doc; • 节点名字:name; • 节点的 namespace: ns; • 节点属性列表:properties; Xml文档的操作其根本原理就是在节点之间移动、查询节点的各 项信息,并进行增加、删除、修改的操作。 xmlDocSetRootElement函数可以将一个节点设置为某个文档 的根节点,这是将文档与节点连接起来的重要手段,当有了根结点以 后,所有子节点就可以依次连接上根节点,从而组织

8、成为一个xml 树。 6)节点集合类型 xmlNodeSet、指针 xmlNodeSetPtr 节点集合代表一个由节点组成的变量,节点集合只作为Xpath的查询结果而出现(XPATH的介绍见后面),因此被定义在xpath.h 中,其定义如下: • A node-set (an unordered collection of nodes without duplicates). • / typedef struct _xmlNodeSet xmlNodeSet; typedef xmlNodeSet *xmlNodeSetPtr; struct _xmlNodeSet {int n

9、odeNr; /* number of nodes in the set */ int nodeMax; /* size of the array as allocated */ xmlNodePtr *nodeTab;/* array of nodes in no particular order */ /* @@ with_ns to check wether namespace nodes should be looked at @@ */ ); 可以看出,节点集合有三个成员,分别是节点集合的节点数、最 大可容纳的节点数,以及节点数组头指针。对节点集合中各个节点的 访问方式很简

10、单,如下: xmlNodeSetPtr nodeset = XPATH 查询结果; for (int i = 0; i < nodeset->nodeNr; i++) {nodeset->nodeTab[i]; ) 注意,Iibxml2是一个c函数库,因此其函数和数据类型都使用 c语言的方式来处理。如果是C+ + ,我想我宁愿用STL中的vector 来表示一个节点集合更好,而且没有内存泄漏或者溢出的担忧。 五、使用Libxml2 工程中要实现一个管理XML文件的后台程序,需要对XML文件进行 创立,解析,修改,查找等操作,下面介绍如何利用libxml2提供的 库来实现上述功能。

11、 1、创立XML文档: 我们使用xmlNewDocO来创立XML文档,然后使用xmlNewNode (), xmlNewChild (), xmlNewProp (), xmlNewText ()等函数 向XML文件中添加节点及子节点,设置元素和属性,创立完毕后用 xmlSaveFormatFileEnc ()来保存XML文件到磁盘(该函数可以设置保 存XML文件时的编码格式)。 例如1: #include ttinclude ttinclude int main (int argc, c

12、har **argv)xmlDocPtr doc = NULL; document pointer */xmlNodePtr root_node = NULL, node = NULL, nodel = NULL;/* node pointers */// Creates a new document, a node and set it as a root node doc = xmlNewDoc (BAD CAST "L0〃);root_node = xmlNewNode(NULL, BADCAST xmlDocSetRootElement(doc, root_node); //c

13、reates a new node, which is "attached” as child node of root_node node. xmlNewChild(root_node, NULL, BAD_CASTz,nodel,z, BAD_CAST 〃content of nodel〃); // xmlNewProp () creates attributes, which is "attached" to an node. node=xmlNewChiId(root_node, NULL, BADCAST 〃node3〃, BAD_CAST〃node has attribute

14、s^); xmlNewProp(node, BAD_CAST 〃attribute”, BAD_CAST 〃yes〃);//Here goes another way to create nodes. node = xmlNewNode (NULL, BAD CAST 〃node4"); nodel = xmlNewText (BAD CAST^other way to create content");xmlAddChiId(node, nodel); xmlAddChiId(root_node, node);//Dumping document to stdio or file

15、xmlSaveFormatFileEnc(argc > 1 ? argv[1]: 〃-〃,doc, 〃UTF-8〃,1);/*free the document */ xmlFreeDoc(doc);xmlCleanupParser(); xmlMemoryDump();//debug memory forregression tests return (0); }编译: gcc -oxmlCreator xmlCreator. cpp -I /home/usr/libxml2/xmlinst/includ e/libxml2/ -L /home/usr/libxml2/xmli

16、nst/lib/ -lxml2 (绿色文字为 libxml2安装路径)-I后接头文件目录-L后接lib库目录 2、解析XML文档 解析文档时仅仅需要文件名并只调用一个函数,并有错误检查,常 用的相关函数有xmlParseFile (), xmlParseDoc (),获取文档指针后, 就可以使用xmlDocGetRootElement ()来获取根元素节点指针,利用 该指针就可以在DOM树里漫游了,结束后要调用xmlFreeDocO释放。 例如2: xmlDocPtr doc; 〃定义解析文档指针 xmlNodePtr cur;〃定义结点指针(你需要它为了在各个结点间移动) xml

17、Char *key; doc = xmlReadFile(url, MY_ENCODING, 256); 〃解析文件 /*检查解析文档是否成功,如果不成功,libxml将指一个注册的 错误并停止。一个常见错误是不适当的编码。XML标准文档除了用 UTF-8或UTFT6外还可用其它编码保存。如果文档是这样,libxml 将自动地为你转换到UTF-8o更多关于XML编码信息包含在XML标准 中。*/ if (doc == NULL ) {fprintf(stderr, ^Document not parsed successfully. \n〃); return; } cur = xml

18、DocGetRootElement (doc);〃确定文档根元素 /*检查确认当前文档中包含内容*/ if (cur == NULL) {fprintf (stderr,,zempty document\nz,); xmlFreeDoc(doc);return; /*在这个例子中,我们需要确认文档是正确的类型。“root”是 在这个例如中使用文档的根类型。*/ if (xmlStrcmp(cur->name, (const xmlChar *) 〃root〃)) { fprintf (stderr, /zdocument of the wrong type, root node !

19、 root");xmlFreeDoc(doc); return; ) cur = cur->xmlChiIdrenNode; while(cur!=NULL) {if ((!xmlStrcmp(cur->name, (const xmlChar *) “keyword"))) ( key = xmlNodeListGetString(doc, cur->xmlChiIdrenNode, 1);printf("keyword: %s\n〃,key); xmlFree(key);} cur = cur->next; xmlFreeDoc(doc);

20、E> IVMdo ws W/ndows < LOG PATH > < ACTIO N >Sys/og < PARAM>采集机 IP 514 /oca/0 重新启动事件收集程序即可。 网络设备日志配置方法Cisco交换机、路由器 device#con

21、f t device(config)#logging on device(config)#logging采集机IP地址 〃采集机IP地址 device(config)#logging trap err 〃日志记录级别,可用"?”查看详细内容 device(config)#service timestamps log datetime localtime 〃日志t己录时间戳设 置检验 device#sh logging华为交换机、路由器 device# info-center enable device# info-center loghost聚集机IP地址 〃米集机IP地址平安设

22、备日志和SNMP配置方法 3、修改XML元素及属性等信息 要修改XML文档里的元素及属性等信息,先需要解析XML文档,获 得一个节点指针(xmlNodePtr node),利用该节点指针漫游D0M树,就 可以在XML文档中获取,修改,添加相关信息。 例如3: 得到一个节点的内容: xmlChar lvalue = xmlNodeGetContent(node);返回值value应该使用xmlFree (value)释放内存 得到一个节点的某属性值: xmlChar lvalue = xmlGetProp(node, (const xmlChar*)〃prop]〃); 返回值需要

23、xmlFree (value)释放内存 设置一个节点的内容: xmlNodeSetContent (node, (const xmlChar *)〃test〃);设置一个节点的某属性值: xmlSetProp (node, (const xmlChar *)〃propl〃,(const xmlChar *)〃vl〃); 添加一个节点元素: xmlNewTextChiId(node, NULL, (const xmlChar *)“keyword”, (const xmlChar *)〃test Element"); 添加一个节点属性: xmlNewProp(node, (cons

24、t xmlChar *)〃propl〃, (const xmlChar *) “test Prop"); 4、查找XML节点 有时候对一个XML文档我们可能只关心其中某一个或某几个特定 的Element的值或其属性,如果漫游D0M树将是很痛苦也很无聊的事, 利用XPath可以非常方便地得到你想的Elemento下面是一个自定义函数: 例如4: xmlXPathOb jectPtr get_nodeset (xmlDocPtr doc, const xmlChar*xpath) { xmlXPathContextPtr context;xmlXPathObjectPtr result;

25、 context = xmlXPathNewContext(doc);if (context 二二 NULL) { printf("context is NULL\n〃);return NULL; }result = xmlXPathEvalExpression(xpath, context); xmlXPathFreeContext(context);if (result 二二 NULL) { printf (/zxmlXPathEvalExpression return NULL\n〃); return NULL;) if (xmlXPathNodeSetlsEmpty(res

26、ult->nodesetval)) { xmlXPathFreeObject(result);printf ("nodeset is empty\n〃); return NULL;return result; ) 在doc指向的XML文档中查询满足xpath表达式条件的节点,返 回满足这一条件的节点集合查询条件xpath的写法参见xpath相关资 料。在查询完毕获取结果集后,就可以通过返回的xmlXPathObjectPtr结构访问该节点: 例如5: xmlChar *xpath = (zz/root/node/[@key=,keyword5 ]zz); xmlXPathObjec

27、tPtr app_result = get_nodeset(doc, xpath); if (appresult == NULL) {printf (/zapp_result is NULL\n〃); return; } int i=0; xmlChar lvalue; if (app_result) {xmlNodeSetPtr nodeset = app_result->nodesetval; for (i=0; i < nodeset->nodeNr; i++) { cur = nodeset->nodeTab[i];cur = cur->xmlChiIdrenNode;

28、 while (cur!=NULL) {value = xmlGetProp(cur, (const xmlChar *)〃key〃); if (value != NULL) { printf (/zvalue: %s\n\n〃,d ConvertCharset (/zutf-8/z, 〃GBK〃, (char *)value));xmlFree(value); }value = xmlNodeGetContent(cur); if (value != NULL) { printf("value: %s\n\n〃,d_ConvertCharset (〃utf-8〃, 〃GBK〃, (

29、char *)value));xmlFree (value); xmlXPathFreeObject (app_result); 通过get_nodeset ()返回的结果集,我们可以获取该节点的元素 及属性,也可以修改该节点的值。例如中在获取值打印的时候用到 d_ConvertCharset ()函数来改变编码格式为GBK,以方便正确读取可 能的中文字符。 5、编码问题 由于Libxml 一般以UTF-8格式保存和操纵数据,如果你的程序使 用其它的数据格式,比方中文字符(GB2312, GBK编码),就必须使用Libxml函数转换到UTF-8o如果你想你的程序以除UTF-8外的其它编

30、 码方式输出也必须做转换。 下面的例如程序提供几个函数来实现对数据编码格式的转换,其中有的要用到Libiconv,因此为了确保他们能正常工作,先 检查以下系统中是否已经安装libiconv库。 例如6: xml Char *Convert Input (const char *in, const char "encoding)unsigned char *out; int ret;int size; int out_size;int temp; xmlCharEncodingHandlerPtr handler;if (in == 0) return 0;handler = x

31、mlFindCharEncodingHandler(encoding); if (!handler) {printf (/zConvertInput: no encoding handler found for ‘%s' \n〃,encoding ? encoding : 〃〃);return 0; }size = (int) strlen(in) + 1; out_size = size * 2 - 1;out = (unsigned char *) xmlMalloc((size_t) out_size); if (out != 0) {temp = size - 1; ret

32、 = handler->input(out, &out_size, (const unsigned char *) in, &temp);if ((ret < 0) | | (temp - size + 1)) { if (ret < 0) { printf(/zConvertInput: conversion wasn't successful. \n〃);} else { printf (Z/Convertlnput:conversion wasn,t successful, converted: %i octets. \n〃,temp);) xmlFree(out);out =

33、0; } else {out = (unsigned char *) xmlRealloc (out, out_size + 1); out[out_size] = 0; Anull terminating out */} } else (printf (/zConvertInput: no mem\nz/); }return out; 例如7: char * Convert ( char *encFrom, char *encTo, const char * in)static char bufin[1024], bufout[1024], *sin, *sout; int m

34、ode, lenin, lenout, ret, nline;iconv_t c_pt; if ((c_pt = iconv_open(encTo, encFrom)) == (iconv_t)-1) ( printf (/ziconv_open false: %s ==> %s\n〃,encFrom, encTo); return NULL;} iconv(c_pt, NULL, NULL, NULL, NULL);lenin = strlen(in) + 1; lenout = 1024;sin = (char *)in; sout = bufout; ret = iconv(

35、c_pt, &sin, (size_t *)&lenin, &sout, (size_t *)&lenout);if (ret =二-1) { return NULL; )iconv_close(c_pt); return bufout; 例如8: char ^d ConvertCharset (char *cpEncodeFrom, char ^cpEncodeTo, const char *cplnput) {static char s_strBufOut[1024], *sin, *cp0ut; size_t ilnputLen, iOutLen, iReturn;iconv_

36、t c_pt; if ((c_pt = iconv_open(cpEncodeTo, cpEncodeFrom))== (iconv_t)-l) {printf (/ziconv_open failed! \nz/); return NULL;} iconv(c_pt, NULL, NULL, NULL, NULL);ilnputLen = strlen(cplnput) + 1; iOutLen = 1024;sin = (char *)cplnput; cpOut = s_strBufOut;iReturn = iconv(c_pt, &sin, &iInputLen, &cp0

37、ut, &i0utLen); Cisco PIX防火墙Syslog配置方法 1. device#conf tdevice(config)#logging on 〃采集机IP地址 〃设置日志级别 〃检验设置 〃保存配置 device(config)#logging host 采集机 Ip 地址 device(config)#logging trap notif device#sh logging Device#write memorySNMP配置方法 1. device#conf t 2. device(config)# snmp-server host 采集机 IP 地址 c

38、ommunity isone 3. device(config)#snmp-server host 采集机 IP 土也址 4. device# sh logging 5. write memory注:isone为community name请根据实际情况填写 Netscreen防火墙Syslog配置方法 l.set syslog config 采集机 IP 地址 Iocal4 Iocal4 〃采集机 IP 地址 2.set syslog enable 3.set syslog traffic (此命令可能没有) 4.set log module system level not

39、if destination syslog 5.saveSNMP配置方法 1. Set snmp community isone 采集机 IP 地址 2. Set snmp community isone read-only ver vl 3. Set snmp host isone 采集机 IP t也址 注:isone为community name请根据实际情况填写 Huawei防火墙Syslog配置方法 1. info-center enable 2. info-center loghost 采集机 IP 地址 language english 3. info-center

40、 source default channel 2 log Ie errorsif (iReturn == -1) return NULL; iconv_close(c_pt);return s strBufOut; SNMP配置方法 1. snmp-agent community read isone 2. snmp-agent community write isone 3. snmp-agent sys-info version all 4. snmp-agent target-host trap address udp-domain 采集机 IP t也址 params se

41、curityname isone注:isone为community name请根据实际情况填写 附录资料:不需要的可以自行删除 libxml2应用实例 Libxml2是一个xml的c语言版的解析器,本来是为Gnome工程开 发的工具,是一个基于MIT License的免费开源软件。它除了支持c 语言版以外,还支持C++、PHP、Pascal. Ruby、Tel等语言的绑定, 能在Windows、Linux、Solaris> MacOsX等平台上运行。功能还是相 当强大的,相信满足一般用户需求没有任何问题。 二、Libxml2 安装: 一般如果在安装系统的时候选中了所有开发库和开发工具的

42、话 (Fedora Core系列下),应该不用安装,下面介绍一下手动安装: 1) 从 xmlsoft 站点或 ftp (ftp. xmlsoft. org)站点下载 libxml 压 缩包(libxml2-xxxx. tar. gz)2)对压缩包进行解压缩tar xvzf libxml2-xxxx. tar. gz 3)进入解压缩后的文件夹中运行 ./configure —prefix /home/usei7 myxml/xmlinst(止匕处为待安装的路径)或者直接使用./configure makemake install 4) 添加路径export PATH=/home/user

43、/myxml/xmlinst/bin:$PATH 说明:为了结构清晰,最好将libxml2不安装在解压目录中。 安装完成后就可以使用简单的代码解析XML文件,包括本地和远程 的文件,但是在编码上有一些问题。Libxml默认只支持UTF-8的编 码,无论输入输出都是UTF-8,所以如果你解析完一个XML得到的结 果都是UTF—8的,如果需要输出GB2312或者其它编码,需要ICONV 来做转码(生成UTF—8编码的文件也可以用它做),如果系统中没有 安装iconv的话,需要安装libiconv。 1)下载 libiconv 压缩包(例如 libiconvT. 11. tar. gz) 2

44、对压缩包进行解压缩 tar xvzf libiconv-1. 11. tar. gz 3)进入解压缩后的文件夹中运行./configure make make install三、关于XML: 在开始研究Libxml2库之前,先了解一下XML的相关基础。XML是 一种基于文本的格式,它可用来创立能够通过各种语言和平台访问的 结构化数据。它包括一系列类似HTML的标记,并以树型结构来对这 些标记进行排列。 例如,可参见清单1中介绍的简单文档。为了更清楚地显示XML 的一般概念,下面是一个简化的XML文件。 清单1. 一个简单的XML文件

45、coding二〃UTF-8〃?> rootdelete 10 清单1中的第一行是XML声明,它告诉负责处理XML的应用程 序,即解析器,将要处理的XML的版本。大局部的文件使用版本1.0 编写,但也有少量的版本L1的文件。它还定义了所使用的编码。 大局部文件使用UTF-8,但是,XML设计用来集成各种语言中的数据, 包括那些不使用英语字母的语言。 接下来出现的是元素。一个元素以开始标记 开始(如<files», 并以结束标记结束(如〈/fil

46、es〉),其中使用斜线(/)来区别于开 始标记。元素是Node的一种类型。XML文档对象模型(D0M)定义 了几种不同的Nodes类型,包括: Elements(如 files 或者 age) Attributes(如 units) Text (如 root 或者 10) 元素可以具有子节点。例如,age元素有一个子元素,即文本节点 10o XML解析器可以利用这种父子结构来遍历文档,甚至修改文档的结 构或内容。LibXML2是这样的解析器中的其中一种,并且文中的例如 应用程序正是使用这种结构来实现该目的。对于各种不同的环境,有 许多不同的解析器和库。LibXML2是用于UNIX环境

47、的解析器和库中 最好的一种,并且经过扩展,它提供了对几种脚本语言的支持,如 Perl 和 Pythono 四、Libxml2中的数据类型和函数 一个函数库中可能有几百种数据类型以及几千个函数,但是记住 大师的话,90%的功能都是由30%的内容提供的。对于Iibxml2, 我认为搞懂以下的数据类型和函数就足够了。 1)内部字符类型xmlChar xmlChar是Libxml2中的字符类型,库中所有字符、字符串都 是基于这个数据类型。事实上它的定义是:xmlstring.h typedef unsigned char xmlChar; 使用unsigned char作为内部字符格式是考

48、虑到它能很好适应 UTF-8编码,而UTF-8编码正是Iibxml2的内部编码,其它格式的 编码要转换为这个编码才能在Iibxml2中使用。 还经常可以看到使用xmlCha产作为字符串类型,很多函数会返 回一个动态分配内存的xmlChar*变量,使用这样的函数时记得要手 动删除内存。 2) xmlChar相关函数 如同标准c中的char类型一样,xmlChar也有动态内存分配、 字符串操作等相关函数。例如xmlMalloc是动态分配内存的函数; xmlFree是配套的释放内存函数;xmlStrcmp是字符串比拟函数等 等。 基本上xmlChar字符串相关函数都在xmlstring.h中

49、定义;而 动态内存分配函数在xmlmemory.h中定义。 3) xmlChar*与其它类型之间的转换 另外要注意,因为总是要在xmlChar*和char*之间进行类型转 换,所以定义了一个宏BAD_CAST,其定义如下:xmlstring.h #define BAD_CAST (xmlChar *) 原那么上来说,unsigned char和char之间进行强制类型转换是 没有问题的。 4)文档类型xmlDoc、指针xmlDocPtr xmlDoc是一个struct,保存了一个xml的相关信息,例如文 件名、文档类型、子节点等等;xmlDocPtr等于xmlDoc*,它搞成 这个样子总让人以为是智能指针,其实不是,要手动删除的。 xmlNewDoc函数创立一个新的文档指针。 xmlParseFile函数以默认方式读入一个UTF-8格式的文档,并 返回文档指针。 xmlReadFile函数读入一个带有某种编码的xml文档,并返回 文档指针;细节见Iibxml2参考手册。 xmlFreeDoc释放文档指针。特别注意,当你调用xmlFreeDoc 时,该文档所有包含的节点内存都被释放,所以一般来说不需要手动

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服