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

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

C#中字符串分割的多种方式

《C#中字符串分割的多种方式》在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分... 目录1. 使用 string.Split2. 使用正则表达式 (Regex.Split)3. 使用

python-nmap实现python利用nmap进行扫描分析

《python-nmap实现python利用nmap进行扫描分析》Nmap是一个非常用的网络/端口扫描工具,如果想将nmap集成进你的工具里,可以使用python-nmap这个python库,它提供了... 目录前言python-nmap的基本使用PortScanner扫描PortScannerAsync异

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

Python中处理NaN值的技巧分享

《Python中处理NaN值的技巧分享》在数据科学和数据分析领域,NaN(NotaNumber)是一个常见的概念,它表示一个缺失或未定义的数值,在Python中,尤其是在使用pandas库处理数据时,... 目录NaN 值的来源和影响使用 pandas 的 isna()和 isnull()函数直接比较 Na