Linux下获取xml调试信息等级
生活随笔
收集整理的這篇文章主要介紹了
Linux下获取xml调试信息等级
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Linux下獲取XML調試信息等級
#ifndef _LOG_H_ #define _LOG_H_#include <stdio.h> #include <string.h> #include <unistd.h> #include <assert.h>#include <libxml/parser.h> #include <libxml/tree.h> #include <libxml/xmlmemory.h> #include <libxml/xpath.h>#define CONF_FILE_NAME "/opt/can_book.xml" #define DEBUG_SON "debug" /* 調試信息的兒子節點 */ #define DEBUG_GRAND_SON_ATTR "debug_level_attr" /* 日志信息孫子節點 */xmlChar *DebugLevelRead(void); // 獲取調試信息等級,默認調試等級是4#endif /* _LOG_H_ */ /***************************************************************<?xml version="1.0" encoding="UTF-8" ?> <can_books><debug><debug_level debug_level_attr="4" /></debug><can0><tag id="1"><attr>ESL</attr><goods>1</goods></tag></can0> </can_books> ***************************************************************/ #include "log.h"xmlChar *DebugLevelRead(void) {assert(CONF_FILE_NAME);xmlDocPtr doc = NULL; // 文檔對象指針xmlNodePtr root = NULL; // 根節點對象指針// 讀入一個帶有"UTF-8"的xml文檔,并返回一個文檔指針if((doc = xmlReadFile(CONF_FILE_NAME, "UTF-8", 256)) == NULL){fprintf(stderr, "Failed to parse xml file:%s\n", CONF_FILE_NAME);return NULL;}// 獲得文檔的根節點if((root = xmlDocGetRootElement(doc)) == NULL){fprintf(stderr, "Failed to get root node.\n");goto FAILED;}xmlNodePtr cur = NULL; // 當前節點 -- 根節點的子節點xmlNodePtr cur_grandson = NULL; // 當前節點的子節點xmlChar *debug_level = NULL; // 調試等級字符串cur = root->xmlChildrenNode;while(cur != NULL){if(!xmlStrcmp(cur->name, (const xmlChar *)DEBUG_SON)){cur_grandson = cur->xmlChildrenNode;debug_level = xmlGetProp(cur_grandson, (const xmlChar*)DEBUG_GRAND_SON_ATTR); // 讀取節點屬性printf("debug_level = %s\r\n", debug_level);}cur = cur->next;}xmlSaveFormatFileEnc(CONF_FILE_NAME, doc, "UTF-8", 1); // 將文檔以"UTF-8"格式進行保存xmlFreeDoc(doc); // 釋放文檔指針return debug_level; FAILED:if(doc){xmlFreeDoc(doc);}return NULL; }接口已經寫好,寫個小測試程序測試一下即可,親測可行。上面注釋部分是/opt/can_book.xml文件。XML和JSON是常用的結構,掌握其解析方式很有必要,我是在ubuntu12.04中使用的。
#ifndef _LOG_H_ #define _LOG_H_#include <stdio.h> #include <string.h> #include <unistd.h> #include <assert.h>#include <libxml/parser.h> #include <libxml/tree.h> #include <libxml/xmlmemory.h> #include <libxml/xpath.h>#define CONF_FILE_NAME "/opt/can_book.xml" #define DEBUG_SON "debug" /* 調試信息的兒子節點 */ #define DEBUG_GRAND_SON_ATTR "debug_level_attr" /* 日志信息孫子節點 */xmlChar *DebugLevelRead(void); // 獲取調試信息等級,默認調試等級是4#endif /* _LOG_H_ */ /***************************************************************<?xml version="1.0" encoding="UTF-8" ?> <can_books><debug><debug_level debug_level_attr="4" /></debug><can0><tag id="1"><attr>ESL</attr><goods>1</goods></tag></can0> </can_books> ***************************************************************/ #include "log.h"xmlChar *DebugLevelRead(void) {assert(CONF_FILE_NAME);xmlDocPtr doc = NULL; // 文檔對象指針xmlNodePtr root = NULL; // 根節點對象指針// 讀入一個帶有"UTF-8"的xml文檔,并返回一個文檔指針if((doc = xmlReadFile(CONF_FILE_NAME, "UTF-8", 256)) == NULL){fprintf(stderr, "Failed to parse xml file:%s\n", CONF_FILE_NAME);return NULL;}// 獲得文檔的根節點if((root = xmlDocGetRootElement(doc)) == NULL){fprintf(stderr, "Failed to get root node.\n");goto FAILED;}xmlNodePtr cur = NULL; // 當前節點 -- 根節點的子節點xmlNodePtr cur_grandson = NULL; // 當前節點的子節點xmlChar *debug_level = NULL; // 調試等級字符串cur = root->xmlChildrenNode;while(cur != NULL){if(!xmlStrcmp(cur->name, (const xmlChar *)DEBUG_SON)){cur_grandson = cur->xmlChildrenNode;debug_level = xmlGetProp(cur_grandson, (const xmlChar*)DEBUG_GRAND_SON_ATTR); // 讀取節點屬性printf("debug_level = %s\r\n", debug_level);}cur = cur->next;}xmlSaveFormatFileEnc(CONF_FILE_NAME, doc, "UTF-8", 1); // 將文檔以"UTF-8"格式進行保存xmlFreeDoc(doc); // 釋放文檔指針return debug_level; FAILED:if(doc){xmlFreeDoc(doc);}return NULL; }接口已經寫好,寫個小測試程序測試一下即可,親測可行。上面注釋部分是/opt/can_book.xml文件。XML和JSON是常用的結構,掌握其解析方式很有必要,我是在ubuntu12.04中使用的。
總結
以上是生活随笔為你收集整理的Linux下获取xml调试信息等级的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 非线性控制4——李雅普诺夫稳定性理论
- 下一篇: svn 回退到指定版本无法提交_svn回