博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
libxml2如何解析xml格式的字符串
阅读量:4056 次
发布时间:2019-05-25

本文共 2749 字,大约阅读时间需要 9 分钟。

libxml2

xmlReadMemory

xmlParseMemory

 

网上的大部分关于xml的文章都是处理xml文件的,就没直接处理xml字符串的说明。

下面是用libxml2解析xml格式的字符串的函数顺序:

1.     xmlParseMemory,字符串转为XML文档

2.     xmlDocGetRootElement,获取XML文档根节点

3.     xmlStrcmp,比较XML字符串,与strcmp差不多

4.     curr = curr->xmlChildrenNode,节点指针指向第一个子节点

5.     curr = curr->next,XML节点指针指向下一个兄弟节点

6.     xmlNodeGetContent,获取XML节点的内容

7.     xmlFreeDoc,释放节点,与free差不多

贴段代码作为参考:

#include 
#include
#include
#include "soapH.h" #include "ExchangeRateWebServiceSoap12.nsmap" #define FIELD_LEN 16 int conv_charset(const char *dest, const char *src, char *input, size_t ilen, char *output, size_t olen) { iconv_t conv = iconv_open(dest, src); if ( conv == (iconv_t) -1 ) return -1; memset(output, 0, olen); if ( iconv(conv, &input, &ilen, &output, &olen) ) return -1; iconv_close(conv); return 0; } int main(int argc, char **argv) { if ( argc != 2 && argc != 3 ) { printf("Usage: %s type [end_point]\n", argv[0]); printf("\ttype = A : all rate\n"); printf("\ttype = B : basic rate\n"); printf("\ttype = C : cross rate\n"); exit(-1); } struct soap soap; soap_init(&soap); // don't set is OK //soap_set_mode(&soap, SOAP_C_UTFSTRING); struct _ns1__getExchangeRate request; struct _ns1__getExchangeRateResponse response; request.theType = argv[1]; char *endpoint = NULL; if ( argc == 3 ) endpoint = argv[2]; if ( soap_call___ns3__getExchangeRate(&soap, endpoint, NULL, &request, &response) == SOAP_OK ) { int len = strlen(response.getExchangeRateResult->__any); xmlDocPtr pdoc = xmlParseMemory(response.getExchangeRateResult->__any, len); xmlNodePtr root = xmlDocGetRootElement(pdoc); xmlNodePtr curr = root; while ( xmlStrcmp(curr->name, (const xmlChar *) "getExchangeRate") ) curr = curr->xmlChildrenNode; for ( curr = curr->xmlChildrenNode; curr; curr = curr->next ) { xmlNodePtr data; for ( data = curr->xmlChildrenNode; data; data = data->next ) { char ifield[FIELD_LEN]; char ofield[FIELD_LEN]; strcpy(ifield, xmlNodeGetContent(data)); if ( conv_charset("GBK", "UTF-8", ifield, strlen(ifield), ofield, FIELD_LEN) ) printf("%s\t%s\n", data->name, ifield); else printf("%s\t%s\n", data->name, ofield); } printf("\n"); } xmlFreeDoc(pdoc); } else { soap_print_fault(&soap, stderr); } // soap_destroy(&soap); soap_end(&soap); soap_done(&soap); return 0; }

转载地址:http://lpoci.baihongyu.com/

你可能感兴趣的文章
Truncate 表之恢复
查看>>
Oracle DG failover 后恢复
查看>>
mysql 主从同步配置
查看>>
为什么很多程序员都选择跳槽?
查看>>
mongdb介绍
查看>>
mongdb在java中的应用
查看>>
区块链技术让Yotta企业云盘为行政事业服务助力
查看>>
Yotta企业云盘更好的为媒体广告业服务
查看>>
Yotta企业云盘助力科技行业创高峰
查看>>
Yotta企业云盘更好地为教育行业服务
查看>>
Yotta企业云盘怎么帮助到能源化工行业
查看>>
企业云盘如何助力商业新发展
查看>>
医疗行业运用企业云盘可以带来什么样的提升
查看>>
媒体广告业如何将内容资产进行高效地综合管理与利用
查看>>
能源化工要怎么管控核心数据
查看>>
媒体广告业如何运用云盘提升效率
查看>>
企业如何运用企业云盘进行数字化转型-实现新发展
查看>>
司法如何运用电子智能化加快现代化建设
查看>>
iSecret 1.1 正在审核中
查看>>
IOS开发的开源库
查看>>