1:查找结点
#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: %s\\n\ 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 document\\n\"); 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 docname\\n\ return(0); } docname = argv[1]; parseDoc (docname); return (1); } 2.获取结点的属性 xmlChar *value = xmlGetProp(node, (const xmlChar *)\"prop1\");返回值需要xmlFree(value)释放内存 #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: %s\\n\ 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 document\\n\"); 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 docname\\n\ return(0); } docname = argv[1]; parseDoc (docname); return (1); } 3设置一个结点的属性 //xmlSetProp(node, (const xmlChar *)\"prop1\ #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 document\\n\"); 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_CAST\"name\ xmlSetProp(cur, (const xmlChar *)\"name\ } cur = cur->next; } return(doc); } //============================= int main(int argc, char **argv) { char *docname; char *keyword; xmlDocPtr doc; if (argc <= 2) { printf(\"Usage: %s docname, keyword\\n\ return(0); } docname = argv[1]; doc = parseDoc (docname); if (doc != NULL) { xmlSaveFormatFile (docname, doc, 0); //把文档写回文件,第一个参数是要写入的文件名 //第二个参数指向 xmlDoc 结构。第三个参数设为 1 保证输出会缩格 xmlFreeDoc(doc); } return (1); } 4:给结点添加新属性 #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: %s\\n\ xmlFree(key); (void)xmlNewProp(cur,BAD_CAST\"name\给结点添加新属性 } 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 document\\n\"); 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, keyword\\n\ return(0); } docname = argv[1]; doc = parseDoc (docname); if (doc != NULL) { xmlSaveFormatFile (docname, doc, 0); //把文档写回文件,第一个参数是要写入的文件名 //第二个参数指向 xmlDoc 结构。第三个参数设为 1 保证输出会缩格 xmlFreeDoc(doc); } return (1); } 3设置一个结点的内容 xmlNodeSetContent(node, (const xmlChar *)\"test\"); #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 document\\n\"); 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 = argv[1]; 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 void parseStory (xmlDocPtr doc, xmlNodePtr cur, char *keyword) { //xmlNewTextChil 函数在由 cur 指定的当前节点指针的位置添加了一个新子元素 xmlNewTextChild (cur, NULL, \"keyword\// 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 document\\n\"); 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, keyword); } cur = cur->next; } return(doc); } //============================= int main(int argc, char **argv) { char *docname; char *keyword; xmlDocPtr doc; if (argc <= 2) { printf(\"Usage: %s docname, keyword\\n\ return(0); } docname = argv[1]; keyword = argv[2]; doc = parseDoc (docname, keyword); if (doc != NULL) { xmlSaveFormatFile (docname, doc, 0); //把文档写回文件,第一个参数是要写入的文件名 //第二个参数指向 xmlDoc 结构。第三个参数设为 1 保证输出会缩格 xmlFreeDoc(doc); } return (1); } /home/arm-2007q1/bin/arm-none-linux-gnueabi-gcc 首先:你要着到arm-linux-gcc 所在的目录。比如 /opt/arm 然后:敲入命令 export PATH=$PATH:/opt/arm 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 69lv.com 版权所有 湘ICP备2023021910号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务