您好,欢迎来到六九路网。
搜索
您的当前位置:首页xml文件解析

xml文件解析

来源:六九路网
查找结点,读取结点属性------------------------------------------------------ 获取结点的属性------------------------------------- 设置结点的属性------------------------------------------------ 给结点添加新属性------------------------------------------- 设置一个结点的内容---------------------------------------------------- 添加新节点---------------------------------------------------- 编码问题------------------------------------------------------------------ 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: %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 #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: %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 #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 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 #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: %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 #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 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 #include

#include #include

void parseStory (xmlDocPtr doc, xmlNodePtr cur, char *keyword) {

//xmlNewTextChil 函数在由 cur 指定的当前节点指针的位置添加了一个新子元素

xmlNewTextChild (cur, NULL, \"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 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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务