这两天听说又有新项目了,听头的大概意思是,在语音网关中新加入一功能,机器开启时,把一准备好的xml数据发送到Intel公司的Viiv服务器中去,然后,接收并分析服务器发送回来的xml数据。
      初步分析,给我的时间是:一个半月,另外,具体详细需求:不明,摸着石头过河。

      当时只有一个感觉:Are you crazy?着手准备下一个项目

     其一,Viiv的技术刚刚推出,网上能用的资料少得可怜.大部分都是介绍Viiv的.而非如何与Viiv交互的,仅有的资料就要靠一篇十来页的PDF文档.
     其二,由于是嵌入式linux,机种本身不带有xml的parser,需要找一个c语言编写的xml parser集成到linux中.
     其三,xml数据是从机器的什么地方收集,发送回的xml数据经分析后要写入哪地方去.都没有说明.


   今天一天时间,找了一个C的xml parser,名称叫libxml,用了一下,感觉比较好用.最主要的是document挺全的,如果要下此库,可以到它的主页:http://xmlsoft.org/ 上下载。

   此库可以适用多个平台,包括Windows,Linux,Unix,为了以后用得着,以下是我对此库写的一些心得.

   ------------------------------------------------------------------------------------------------------------------------------------
   ------------------------------------------------------------------------------------------------------------------------------------

 首先,此库定义了一些基本的类型,用得比较多:
   a)xmlChar --相当于字符串类型
   b)xmlDoc  -- 整个文档的结构体
   c)xmlNodePtr/xmlNode --结点的结构体

  xmlDoc的结构体如下所示:
 1}

xmlNode的结构体:
}


以下是示例:
   打开一个xml文件:
   xmlDocPtr doc;
  doc = xmlParseFile(docname);
  if (doc == NULL ) {
     fprintf(stderr,"Document not parsed successfully. \n");
    return;
  }
   获得根元素:
  xmlNodePtr cur;
  cur = xmlDocGetRootElement(doc);
 
  比较元素的值:
 if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
    fprintf(stderr,"document of the wrong type, root node != story");  
    xmlFreeDoc(doc);
    return;
  }

  获得子结点:
  cur = cur->xmlChildrenNode;
   while (cur != NULL) {
   if ((!xmlStrcmp(cur->name, (const xmlChar *)"storyinfo"))){
      parseStory (doc, cur);
   }
     cur = cur->next;
 }

 获得结点元素的值:
 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", key);
    xmlFree(key);
    }
cur = cur->next;
}
    return;
}

注意 着手准备下一个项目:When we find the "keyword" element, we need to print its contents. Remember that in XML, the text contained within an element is a child node of that element, so we turn to cur->xmlChildrenNode. To retrieve it, we use the function xmlNodeListGetString, which also takes the doc pointer as an argument. In this case, we just print it out.
   意思是说,结点的值就相当于该结点的ChildrenNode,所以,获得某个结点,要想取其值的话,一定要用结点->xmlChildrenNode.

相关文章:

  • 2022-01-26
  • 2021-04-20
  • 2021-04-06
  • 2021-08-10
  • 2022-12-23
  • 2022-12-23
  • 2021-07-16
  • 2021-12-24
猜你喜欢
  • 2021-12-01
  • 2022-02-09
  • 2022-12-23
  • 2021-06-29
  • 2022-01-18
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案