文档章节

libxml2 如何进行字符串处理

东湖畔新家
 东湖畔新家
发布于 2017/05/09 18:53
字数 380
阅读 4
收藏 0

libxml2

xmlReadMemory

xmlParseMemory

 

都是处理xml文件的,就没直接处理xml字符串的函数

 

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

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

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

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

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

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

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

 

#include <iconv.h>  
#include <libxml/parser.h>  
#include <libxml/xmlmemory.h>  
  
#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;  
}
  gcc -O2 -o exchange exchange.c soapC.c soapClient.c ../../stdsoap2.c -I../.. -I/usr/include/libxml2 -L../.. -lgsoap -lxml2

 

本文转载自:http://blog.csdn.net/sblig/article/details/24669763

上一篇: sql 模糊查询
下一篇: 学习目录
东湖畔新家
粉丝 1
博文 170
码字总数 31582
作品 0
杭州
后端工程师
私信 提问
Windows环境下libxml2库的使用小结

(1)--环境的搭建,下载与安装LIBXML2和ICONV Libxml2是一个C语言的XML程序库,可以简单方便的提供对XML文档的各种操作,并且支持XPATH查询,以及部分的支持XSLT转换等功能。Libxml2的下载地址...

moki_oschina
2014/08/19
0
0
Libxml2库的编译和使用

Libxml2库提供了C语言解析和构造xml文档的接口,为后台C语言处理程序和前台应用程序提供了一种通用的通迅方式。 本文以libxml2-2.6.30版本来说明Libxml2库的使用方法。 1. 编译库文件 libxml...

mickelfeng
2013/05/18
0
0
C++的XML编程经验――LIBXML2库使用指南

写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML库,而且它同时支持多种编程语言;2)LIBXML2库的Tutoria...

mickelfeng
2013/04/08
0
0
configure: error: xml2-config not found. Please ch

configure: error: xml2-config not found. Please check your libxml2 installation 参考文章:http://blog.csdn.net/anljf/article/details/6981247 configure: error: xml2-config not fo......

天下杰论
2014/06/16
0
0
LIBXML2库使用指南

C++的XML编程经验――LIBXML2库使用指南 写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML库,而且它同时支...

长平狐
2012/09/03
5.4K
0

没有更多内容

加载失败,请刷新页面

加载更多

GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238

GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238 (Address already in use) 官方文档虽然有相同的问题,但是对我的问题没起作用…… 后面发现自己手贱...

wenzhizhong
昨天
2
0
REST接口

文章来源 https://zhuanlan.zhihu.com/p/28674721?group_id=886181549958119424 http://www.ruanyifeng.com/blog/2014/05/restful_api.html REST 对请求的约定 REST 用来规范应用如何在 HTTP......

Airship
昨天
3
0
Spring Cloud Config 统一配置中心

Spring Cloud Config 统一配置中心 一、统一配置中心 统一管理配置 通常,我们会使用配置文件来管理应用的配置。如一个 Spring Boot 的应用,可以将配置信息放在 application.yml 文件中,如...

非摩尔根
昨天
2
0
android ------ AAPT2 error: check logs for details解决方法

AAPT 是全称是 Android Asset Packaging Tool,它是构建 App,甚至是构建 Android 系统都必不可少的一个工具。它的作用是将所有资源文件压缩打包到Android APK 当中。我们在 Android SDK 目录...

切切歆语
昨天
2
0
今天的学习

今天学到了<select></select>标签: <label for="unittype">Select unit type: </label><select id="unittype" name="unittype" autofocus > <option value="1"> Miner </option> ......

墨冥
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部