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

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤