libxml2 如何进行字符串处理

2023-11-01 16:38

本文主要是介绍libxml2 如何进行字符串处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

 

这篇关于libxml2 如何进行字符串处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/324321

相关文章

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer