<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    知新軒
    溫故而知新,可以為師矣.
    posts - 7,  comments - 2,  trackbacks - 0

    1,編碼時需要包括頭文件:#include <libxml/globals.h>,編譯時需要鏈接 -lxml2 -lwsock32 的庫文件.
    2,xmlexports.h需要修改部分代碼才可以被正常連接,否則使用xmlfree函數時會報"_imp__xmlFree"的鏈接錯誤.
       修改代碼如下:
       將 #if defined(_WIN32) && defined(__MINGW32__) 代碼段,包括:
       #if defined(_WIN32) && defined(__MINGW32__)
      #undef XMLPUBFUN
      #undef XMLPUBVAR
      #undef XMLCALL
      #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
        #define XMLPUBFUN __declspec(dllexport)
        #define XMLPUBVAR __declspec(dllexport)
      #else
        #define XMLPUBFUN
        #if !defined(LIBXML_STATIC)
          #define XMLPUBVAR __declspec(dllimport) extern
        #else
          #define XMLPUBVAR extern
        #endif
      #endif
      #define XMLCALL __cdecl
      #if !defined _REENTRANT
        #define _REENTRANT
      #endif
    #endif
    注釋掉,然后在原有位置添上:
    #if defined(_WIN32) && defined(__MINGW32__)
       #define XMLPUBFUN
       #ifdef __cplusplus
         #define XMLPUBVAR extern
       #else
         #define XMLPUBVAR
       #endif
       #if !defined _REENTRANT
         #define _REENTRANT
       #endif
    #endif
       具體原因及詳細信信息    <?xml version="1.0" encoding="UTF-8"?>
       <NodeRoot ver = "000">
          <Node1 ver = "111">
                <Node2 ver = "222"/>
           </Node1>
           <Node3 ver = "333">
                 v3
           <Node3/>
       </NodeRoot>
       "
       首先,打開xml文件,使用:
       XMLPUBFUN xmlDocPtr XMLCALL   xmlParseFile  (const char *filename); (libxml/parser.h)
       獲得xml的根節點,使用:
       XMLPUBFUN xmlNodePtr XMLCALL xmlDocGetRootElement (xmlDocPtr doc);(libxml/tree.h)
       
       例:
      int ParseXMLFile(char *pXMLFileName)
       // retval:
       // 0 : Success
       // -1: Error ,for xml file open
       // -2: Error ,for xml file parse
       {
           int retval = 0;
           xmlDocPtr doc = NULL;
           xmlNodePtr cur = NULL;

           doc = xmlParseFile(pXMLFileName);
           if (doc == NULL ) 
           {
                 fprintf(stderr,"XMLParser:Document not parsed successfully. \n");
                 retval = -1;
                 goto ERROR_RET;
           }
           cur = xmlDocGetRootElement(doc);         // 會得到NodeRoot 節點.
           if (cur == NULL) 
           {
                 fprintf(stderr,"XMLParser:Empty document.\n");
                 retval = -2;
                 goto ERROR_RET;
           }


           //     ...  do something
           parsexml(doc,cur);         // 定義見下面.


        ERROR_RET:
           if(doc != NULL)
               xmlFreeDoc(doc);
           return retval;
        }
       其中,:
       結構xmlNodePtr 定義如下(libxml/tree.h):
        typedef struct _xmlNode xmlNode;
        typedef xmlNode *xmlNodePtr;
        struct _xmlNode {
        void           *_private; /* application data */
        xmlElementType   type; /* type number, must be second ! */
        const xmlChar   *name;      /* the name of the node, or the entity */ 
        struct _xmlNode *children; /* parent->childs link */
        struct _xmlNode *last; /* last child link */
        struct _xmlNode *parent; /* child->parent link */
        struct _xmlNode *next; /* next sibling link  */
        struct _xmlNode *prev; /* previous sibling link  */
        struct _xmlDoc  *doc; /* the containing document */

        /* End of common part */
        xmlNs           *ns;        /* pointer to the associated namespace */
        xmlChar         *content;   /* the content */
        struct _xmlAttr *properties;/* properties list */
        xmlNs           *nsDef;     /* namespace definitions on this node */
        void            *psvi; /* for type/PSVI informations */
        unsigned short   line; /* line number */
        unsigned short   extra; /* extra data for XPath/XSLT */
        };
        我們可以使用節點結構中的指針成員來遍歷xml樹中的各個節點.
        我一般使用遞歸的方式遍歷xml樹:
       int parsexml(xmlDocPtr doc, xmlNodePtr cur)
       {
           while (cur != NULL)
           {
              // do something about every node
               printf("name: %s\n",cur->name);
              {
                    //  for example,we get the "ver" attribute of every node
                    xmlChar *uri = NULL; 
                    uri = xmlGetProp(cur,(const xmlChar *) "ver"); 
                    if(uri != NULL)
                    {
                      printf("ver: %s\n", uri);
                       xmlFree(uri);
                    }
                    ;   // ... others

                 }
        
                 parsexml(doc,cur->xmlChildrenNode);
                 cur = cur->next;
              }
              return 0;
          }
         對于我們已經獲取的結點,我們可以使用以下函數獲取其各項屬性各項屬性:
          XMLPUBFUN xmlChar * XMLCALL xmlGetProp  (xmlNodePtr node,const xmlChar *name); (libxml/tree.h)
          獲得該節點的某項屬性,其中,屬性名稱使用 第二個參數name指定,第一個參數需要傳入結點指針.
          屬性的值通過函數返回傳出,返回類型是 xmlChar,這里注意,返回的地址是指向堆的,這意味著你需要
          在使用完畢后,手動釋放這塊內存.這里使用xmlfree函數,并將指針傳入即可.
          
          
          更多函數參見 libxml/tree.h

          最后,你需要調用xmlFreeDoc函數進行必要的釋放工作.
          
          完整代碼:
          
    http://m.tkk7.com/Files/lixf/testlibxml.rar
          
      
       

    posted on 2005-12-07 11:40 ___ 閱讀(1464) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    <2005年12月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(1)

    隨筆檔案(6)

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲沟沟美女亚洲沟沟| 成人永久免费高清| 久久久久亚洲av无码尤物| 爱情岛论坛免费视频| 免费观看日本污污ww网站一区| 亚洲日产乱码一二三区别| 拨牐拨牐x8免费| 亚洲国产区男人本色在线观看| 午夜国产精品免费观看| 亚洲av片不卡无码久久| 免费H网站在线观看的| 亚洲国产日韩女人aaaaaa毛片在线| 日韩免费无码视频一区二区三区| 亚洲av成人无码久久精品| 99久久免费精品视频| 亚洲宅男永久在线| 在线a免费观看最新网站| 亚洲字幕在线观看| 我要看WWW免费看插插视频| 成人亚洲国产精品久久| 免费夜色污私人影院在线观看| 一个人看的www视频免费在线观看| 国产成人高清亚洲| 无码中文字幕av免费放dvd| 亚洲综合色7777情网站777| 精品免费久久久久久成人影院| 国产亚洲Av综合人人澡精品| 久久精品国产亚洲精品| 嫩草成人永久免费观看| 亚洲精品午夜国产va久久| 免费一级一片一毛片| 国产免费阿v精品视频网址| 中文字幕亚洲免费无线观看日本 | 在线看片免费不卡人成视频| 国产.亚洲.欧洲在线| 免费萌白酱国产一区二区| 久青草视频97国内免费影视| 亚洲国产精品久久网午夜| 国产做床爱无遮挡免费视频| 野花香高清视频在线观看免费 | 丁香婷婷亚洲六月综合色|