xml的创建和解析

   xmlDocPtr doc = xmlNewDoc(BAD_CAST"1.0");

    xmlNodePtr root_node = xmlNewNode(NULL,BAD_CAST"root");

    //设置根节点

    xmlDocSetRootElement(doc,root_node);

    //在根节点中直接创建节点

  //  xmlNewTextChild(root_node,NULL,BAD_CAST "newNode1",BAD_CAST "newNode1 content");

    //xmlNewTextChild(root_node,BAD_CAST "newNode2",BAD_CAST "newNode2 content");

//    xmlNewTextChild(root_node,BAD_CAST "newNode3",BAD_CAST "newNode3 content");

    //创建一个节点,设置其内容和属性,然后加入根结点

//    xmlNodePtr node = xmlNewNode(NULL,BAD_CAST"node2");

  //  xmlNodePtr content = xmlNewText(BAD_CAST"NODE CONTENT");

//    xmlAddChild(root_node,node);

  //  xmlAddChild(node,content);

  //  xmlNewProp(node,BAD_CAST"attribute",BAD_CAST "yes");

    //创建一个儿子和孙子节点

   xmlNodePtr node = xmlNewNode(NULL,BAD_CAST "son1");

    xmlAddChild(root_node,node);

    xmlNodePtr grandson = xmlNewNode(NULL,BAD_CAST "om_alarm_id");

    xmlAddChild(node,grandson);

    xmlAddChild(grandson,xmlNewText(BAD_CAST "3"));
    grandson = xmlNewNode(NULL,BAD_CAST "alarm_position");
    xmlAddChild(node,xmlNewText(BAD_CAST "E:\\project\\test"));

    grandson = xmlNewNode(NULL,BAD_CAST "alarm_type");
    xmlAddChild(node,xmlNewText(BAD_CAST "5"));





    node = xmlNewNode(NULL,BAD_CAST "son2");

    xmlAddChild(root_node,node);

    grandson = xmlNewNode(NULL,xmlNewText(BAD_CAST "4"));
    grandson = xmlNewNode(NULL,xmlNewText(BAD_CAST "E:\\project\\test\\libxml"));

    grandson = xmlNewNode(NULL,xmlNewText(BAD_CAST "6"));



node = xmlNewNode(NULL,BAD_CAST "son3");

    xmlAddChild(root_node,xmlNewText(BAD_CAST "5"));
    grandson = xmlNewNode(NULL,xmlNewText(BAD_CAST "E:\\project\\test\\mcfddfa"));

    grandson = xmlNewNode(NULL,xmlNewText(BAD_CAST "1"));



    //存储xml文档

    int nRel = xmlSaveFile("CreatedXml.xml",doc);

    if (nRel != -1)

    {

      // MessageBox("一个xml文档被创建,写入个字节");

    }

    //释放文档内节点动态申请的内存

    xmlFreeDoc(doc);

解析




xmlDocPtr doc;           //定义解析文档指针

    xmlNodePtr curNode;      //定义结点指针(你需要它为了在各个结点间移动)

    xmlChar *szKey;          //临时字符串变量

    char *szDocName;
	char error[256]="";

    szDocName = "./CreatedXml.xml";

    doc = xmlReadFile(szDocName,"UTF-8",XML_PARSE_RECOVER); //解析文件

    //检查解析文档是否成功,如果不成功,libxml将指一个注册的错误并停止。

    //一个常见错误是不适当的编码。XML标准文档除了用UTF-8或UTF-16外还可用其它编码保存。

    //如果文档是这样,libxml将自动地为你转换到UTF-8。更多关于XML编码信息包含在XML标准中.

    if (NULL == doc)

    {  

      MessageBox("error");

     
    }

    curNode = xmlDocGetRootElement(doc); //确定文档根元素

   

    if (NULL == curNode)

    {

     
		MessageBox("error");
       xmlFreeDoc(doc);

      

    }

   

    if (xmlStrcmp(curNode->name,BAD_CAST "root"))

    {

      
       MessageBox("error");
       
		xmlFreeDoc(doc);

       

    }

    curNode = curNode->xmlChildrenNode;

    xmlNodePtr propNodePtr;

    while(curNode != NULL)

    {

       //取出节点中的内容
		memset(&alarm_reg,0x00,sizeof(alarm_reg));
		propNodePtr = curNode->xmlChildrenNode;
       if ((!xmlStrcmp(curNode->name,(const xmlChar *)"son")))

       {

           while(propNodePtr!=NULL)
		   {
		   if((!xmlStrcmp(propNodePtr->name,(const xmlChar *)"om_alarm_id")))
		   {
			szKey = xmlNodeGetContent(propNodePtr);
		//	sprintf(alarm_reg.alarm_id,"%s",(char*)szKey);
			sscanf((char*)szKey,alarm_reg.alarm_id);
			sprintf(error,alarm_reg.alarm_id);
			WRITE_LOG(error,LOG_TYPE_INFO,LOG_LEVEL_RUN,true);
			xmlFree(szKey);
		   }
		  
			if((!xmlStrcmp(propNodePtr->name,(const xmlChar *)"alarm_position")))
		   {
				 
				szKey = xmlNodeGetContent(propNodePtr);

			sscanf((char*)szKey,alarm_reg.alarm_picpath);
			sprintf(error,alarm_reg.alarm_picpath);
			WRITE_LOG(error,true);
			//WRITE_LOG((char*)szKey,true);

			xmlFree(szKey);
		   }
			 if((!xmlStrcmp(propNodePtr->name,(const xmlChar *)"alarm_type")))
		   {
				szKey = xmlNodeGetContent(propNodePtr);
			sscanf((char*)szKey,"%d",&alarm_reg.alarm_type);
			sprintf(error,alarm_reg.alarm_type);
			WRITE_LOG(error,true);

				 

			xmlFree(szKey);
		   }
		   
		   propNodePtr=propNodePtr->next;
		 
		   
		   }
		   
		   //szKey = xmlNodeGetContent(curNode);

           
			
           

       }

       //查找带有属性attribute的节点
/*
       if (xmlHasProp(curNode,BAD_CAST "attribute"))

       {

           propNodePtr = curNode;

       }
*/
       curNode = curNode->next;

    }

    //查找属性

 /*   xmlAttrPtr attrPtr = propNodePtr->properties;

    while (attrPtr != NULL)

    {

       if (!xmlStrcmp(attrPtr->name,BAD_CAST "attribute"))

       {

           xmlChar* szAttr = xmlGetProp(propNodePtr,BAD_CAST "attribute");

           cout<<"get attribute = "<<szAttr<<endl;

           xmlFree(szAttr);

       }

       attrPtr = attrPtr->next;

    }
*/
    xmlFreeDoc(doc);

typedef struct DB_REG_ALARM_INFO_
{
	unsigned char alarm_id[64];
	unsigned int alarm_type; //报警类型
	unsigned char alarm_picpath[256];//报警图片的位置

}DB_REG_ALARM_INFO,*DB_REG_ALARM_INFO_PTR;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇