xml文件解析.doc_第1页
xml文件解析.doc_第2页
xml文件解析.doc_第3页
xml文件解析.doc_第4页
xml文件解析.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

查找结点,读取结点属性-获取结点的属性-设置结点的属性-给结点添加新属性-设置一个结点的内容-添加新节点-编码问题-XML树: John Fleck June 2, 2002 example keyword This is the headline This is the body text.1:查找结点#include #include #include #include #include Void parseStory (xmlDocPtr doc, xmlNodePtr cur) xmlChar *key; cur = cur-xmlChildrenNode; while (cur != NULL) if (!xmlStrcmp(cur-name, (const xmlChar *)keyword) key = xmlNodeListGetString(doc, cur-xmlChildrenNode, 1); printf(keyword: %sn, key); xmlFree(key); cur = cur-next; return;/=static void parseDoc(char *docname) xmlDocPtr doc;/声明指向你要解析的文档的指针 xmlNodePtr cur;/声明一个节点指针(处理单个的节点的时候需要它) doc = xmlParseFile(docname); if (doc = NULL ) /检查解析文档是否成功 fprintf(stderr,Document not parsed successfully. n); return; cur = xmlDocGetRootElement(doc);/获取文档的根元素 if (cur = NULL) /检查确认文档包含了东西 fprintf(stderr,empty documentn); xmlFreeDoc(doc); return; if (xmlStrcmp(cur-name, (const xmlChar *) story)/*在我们的例子里,我们需要确认文档内容正确,”story”是在本教程中使用到的文档的根类型*/ fprintf(stderr,document of the wrong type, root node != story); xmlFreeDoc(doc); return; cur = cur-xmlChildrenNode;/*获得 cur 的第一个子节点。此时,cur 指向文档的根,也就是”story”元素*/ while (cur != NULL) /这个循环遍历”story 的所有子元素 if (!xmlStrcmp(cur-name, (const xmlChar *)storyinfo) parseStory (doc, cur); cur = cur-next; xmlFreeDoc(doc); return;/=int main(int argc, char *argv) char *docname; if (argc = 1) printf(Usage: %s docnamen, argv0); return(0); docname = argv1; parseDoc (docname); return (1);2获取结点的属性xmlChar *value = xmlGetProp(node, (const xmlChar *)prop1);返回值需要xmlFree(value)释放内存#include #include #include #include #include /获取属性void getReference (xmlDocPtr doc, xmlNodePtr cur) xmlChar *uri; cur = cur-xmlChildrenNode; while (cur != NULL) if (!xmlStrcmp(cur-name, (const xmlChar *)reference) uri = xmlGetProp(cur, uri);/*关键函数 xmlGetProp,它返回一个保存着属性值的 xmlChar,在本例中,我们仅仅把它打印出来。如果你用 DTD 为该属性声明了一个固定或缺省的属性,这个函数会获取到该值*/ printf(uri: %sn, uri); xmlFree(uri); cur = cur-next; return;void parseDoc(char *docname) xmlDocPtr doc; xmlNodePtr cur; doc = xmlParseFile(docname); if (doc = NULL ) fprintf(stderr,Document not parsed successfully. n); return; cur = xmlDocGetRootElement(doc); if (cur = NULL) fprintf(stderr,empty documentn); xmlFreeDoc(doc); return; if (xmlStrcmp(cur-name, (const xmlChar *) story) fprintf(stderr,document of the wrong type, root node != story); xmlFreeDoc(doc); return; getReference (doc, cur); xmlFreeDoc(doc); return;int main(int argc, char *argv) char *docname; if (argc = 1) printf(Usage: %s docnamen, argv0); return(0); docname = argv1; parseDoc (docname); return (1);3设置一个结点的属性/xmlSetProp(node, (const xmlChar *)prop1, (const xmlChar *)v1);#include #include #include #include #include xmlDocPtr parseDoc(char *docname) xmlDocPtr doc; xmlNodePtr cur; doc = xmlParseFile(docname); if (doc = NULL ) fprintf(stderr,Document not parsed successfully. n); return (NULL); cur = xmlDocGetRootElement(doc); if (cur = NULL) fprintf(stderr,empty documentn); xmlFreeDoc(doc); return (NULL); if (xmlStrcmp(cur-name, (const xmlChar *) story) fprintf(stderr,document of the wrong type, root node != story); xmlFreeDoc(doc); return (NULL); cur = cur-xmlChildrenNode; while (cur != NULL) if (!xmlStrcmp(cur-name, (const xmlChar *)storyinfo) /(void)xmlNewProp(cur,BAD_CASTname,BAD_CASTwo); xmlSetProp(cur, (const xmlChar *)name, (const xmlChar *)change); cur = cur-next; return(doc);/=int main(int argc, char *argv) char *docname; char *keyword; xmlDocPtr doc; if (argc = 2) printf(Usage: %s docname, keywordn, argv0); return(0); docname = argv1; doc = parseDoc (docname); if (doc != NULL) xmlSaveFormatFile (docname, doc, 0); /把文档写回文件,第一个参数是要写入的文件名 /第二个参数指向 xmlDoc 结构。第三个参数设为 1 保证输出会缩格 xmlFreeDoc(doc); return (1);4:给结点添加新属性#include #include #include #include #include void parseStory (xmlDocPtr doc, xmlNodePtr cur) xmlChar *key; cur = cur-xmlChildrenNode; while (cur != NULL) if (!xmlStrcmp(cur-name, (const xmlChar *)keyword) key = xmlNodeListGetString(doc, cur-xmlChildrenNode, 1); printf(keyword: %sn, key); xmlFree(key); (void)xmlNewProp(cur,BAD_CASTname,BAD_CASTwo);/给结点添加新属性 cur = cur-next; return;xmlDocPtr parseDoc(char *docname) xmlDocPtr doc; xmlNodePtr cur; doc = xmlParseFile(docname); if (doc = NULL ) fprintf(stderr,Document not parsed successfully. n); return (NULL); cur = xmlDocGetRootElement(doc); if (cur = NULL) fprintf(stderr,empty documentn); xmlFreeDoc(doc); return (NULL); if (xmlStrcmp(cur-name, (const xmlChar *) story) fprintf(stderr,document of the wrong type, root node != story); xmlFreeDoc(doc); return (NULL); cur = cur-xmlChildrenNode; while (cur != NULL) if (!xmlStrcmp(cur-name, (const xmlChar *)storyinfo) parseStory(doc,cur); cur = cur-next; return(doc);/=int main(int argc, char *argv) char *docname; char *keyword; xmlDocPtr doc; if (argc = 2) printf(Usage: %s docname, keywordn, argv0); return(0); docname = argv1; doc = parseDoc (docname); if (doc != NULL) xmlSaveFormatFile (docname, doc, 0); /把文档写回文件,第一个参数是要写入的文件名 /第二个参数指向 xmlDoc 结构。第三个参数设为 1 保证输出会缩格 xmlFreeDoc(doc); return (1);3设置一个结点的内容xmlNodeSetContent(node, (const xmlChar *)test);#include #include #include #include #include void parseStory (xmlDocPtr doc, xmlNodePtr cur) cur = cur-xmlChildrenNode; while (cur != NULL) if (!xmlStrcmp(cur-name, (const xmlChar *)keyword) xmlNodeSetContent(cur, (const xmlChar *)test); cur = cur-next; return;xmlDocPtr parseDoc(char *docname) xmlDocPtr doc; xmlNodePtr cur; doc = xmlParseFile(docname); if (doc = NULL ) fprintf(stderr,Document not parsed successfully. n); return (NULL); cur = xmlDocGetRootElement(doc); if (cur = NULL) fprintf(stderr,empty documentn); xmlFreeDoc(doc); return (NULL); if (xmlStrcmp(cur-name, (const xmlChar *) story) fprintf(stderr,document of the wrong type, root node != story); xmlFreeDoc(doc); return (NULL); cur = cur-xmlChildrenNode; while (cur != NULL) if (!xmlStrcmp(cur-name, (const xmlChar *)storyinfo) parseStory (doc, cur); cur = cur-next; return(doc);/=int main(int argc, char *argv) char *docname; char *keyword; xmlDocPtr doc; docname = argv1; doc = parseDoc (docname); if (doc != NULL) xmlSaveFormatFile (docname, doc, 0); /把文档写回文件,第一个参数是要写入的文件名 /第二个参数指向 xmlDoc 结构。第三个参数设为 1 保证输出会缩格 xmlFreeDoc(doc); return (1);添加一个新的结点 xmlNewTextChild(node, NULL, (const xmlChar *)keyword, (const xmlChar *)test Element);#include #include #include #include #include void parseStory (xmlDocPtr doc, xmlNodePtr cur, char *keyword) /xmlNewTextChil 函数在由 cur 指定的当前节点指针的位置添加了一个新子元素 xmlNewTextChild (cur, NULL, keyword, keyword);/*keyword return;xmlDocPtr parseDoc(char *docname, char *keyword) xmlDocPtr doc; xmlNodePtr cur; doc = xmlParseFile(docname); if (doc = NULL ) fprintf(stderr,Document not parsed successfully. n); return (NULL); cur = xmlDocGetRootElement(doc); if (cur = NULL) fprintf(stderr,empty documentn); xmlFreeDoc(doc); return (NULL); if (xmlStrcmp(cur-name, (const

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论