zoukankan      html  css  js  c++  java
  • xml文件的解析

    #include <stdio.h>
    #include <libxml/parser.h>

    int main(int argc, char* argv[])
    {
       xmlDocPtr doc;           //定义解析文档指针
       xmlNodePtr curNode;      //定义结点指针(你需要它为了在各个结点间移动)
       xmlChar *szKey;          //临时字符串变量
       char *szDocName;

       if (argc <= 1) {
          printf("Usage: %s docname\n", argv[0]);
          return  -1;
       }

       szDocName = argv[1];
       doc = xmlReadFile(szDocName,  "GB2312",  XML_PARSE_RECOVER); //以GB2312的编码方式读入解析文件

       //检查解析文档是否成功,如果不成功,libxml将指一个注册的错误并停止。
       //一个常见错误是不适当的编码。XML标准文档除了用UTF-8或UTF-16外还可用其它编码保存。
       //如果文档是这样,libxml将自动地为你转换到UTF-8。更多关于XML编码信息包含在XML标准中.
       if (NULL == doc) {  
          fprintf(stderr,"Document is not parsed successfully. \n");    
          return -1;
       }

       curNode = xmlDocGetRootElement(doc); //确定文档根元素
       /*检查确认当前文档中包含内容*/
       if (NULL == curNode) {
          fprintf(stderr,"the document is empty.\n");
          xmlFreeDoc(doc);

          return -1;
       }

       /*在这个例子中,我们需要确认文档是正确的类型。“root”是在这个示例中使用文档的根类型。*/
       if (xmlStrcmp(curNode->name,  BAD_CAST  "root")) {
          fprintf(stderr,"document of the wrong type, root_node is not root");
          xmlFreeDoc(doc);
          return -1;
       }

       curNode = curNode->xmlChildrenNode;
       xmlNodePtr propNodePtr = curNode;
       while(NULL != curNode) {
          //取出节点中的内容
          if ((!xmlStrcmp(curNode->name,  (const xmlChar *)"newNode1"))) {
             szKey = xmlNodeGetContent(curNode);
             printf("newNode1: %s\n", szKey);
             xmlFree(szKey);
          }

          //查找带有属性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");
             printf("get attribute = %s\n", szAttr);
             xmlFree(szAttr);
          }
          attrPtr = attrPtr->next;
       }


      xmlFreeDoc(doc);

      xmlCleanupParser();

        return 0;

    }

  • 相关阅读:
    UVALive 7509 Dome and Steles
    HDU 5884 Sort
    Gym 101194H Great Cells
    HDU 5451 Best Solver
    HDU 5883 The Best Path
    HDU 5875 Function
    卡特兰数
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    Spark Scala Flink版本对应关系
  • 原文地址:https://www.cnblogs.com/joeyupdo/p/2621159.html
Copyright © 2011-2022 走看看