`

libxml2 如何进行字符串处理

    博客分类:
  • c++
阅读更多

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-2.9.14源码

    例如,WebKit、Firefox、PHP等都依赖libxml2进行XML处理。开发者可以利用libxml2轻松实现XML文档的读取、解析、修改、生成等操作,提升应用程序的XML处理能力。 **总结** Libxml2作为C语言的XML处理库,为开发者...

    C语言库libxml2实例详解

    本文档旨在通过具体实例介绍libxml2的基本使用方法,帮助读者更好地理解如何利用libxml2进行XML文件的解析工作。 #### 二、libxml2简介 libxml2是一个广泛使用的C语言库,用于处理XML文档。它提供了丰富的API接口,...

    使用mingw编译后的libxml2-2.7.7安装包

    例如,你可以使用libxml2进行XML文档的解析、创建和修改: ```c #include &lt;libxml/xmlmemory.h&gt; #include &lt;libxml/parser.h&gt; int main() { xmlChar *content = (xmlChar*) "&lt;doc&gt;&lt;element&gt;Text&lt;/element&gt;&lt;/doc&gt;";...

    libxml2-2.9.12

    **正文** Libxml2是XML处理领域中的一个关键组件,其版本为2.9.12,这是一款功能强大的开源C语言程序库。这个库旨在为开发者提供一套全面...了解并熟练掌握Libxml2,对于进行XML相关的软件开发来说,是非常有价值的。

    libxml2的编程实例

    在这个文件中,你可能找到对libxml2 API的调用,例如`xmlDocPtr`用于创建和管理XML文档对象,`xmlNodePtr`表示XML文档中的节点,`xmlChar`是libxml2用来表示字符串的类型,以及`xmlNewNode`、`xmlNewProp`、`...

    libxml2编程手册

    2. **xmlNodeDump()**:将节点及其子节点以字符串形式输出,方便调试和日志记录。 3. **xmlNodeSetContent()**:设置指定节点的内容。 #### 五、XPath查询 XPath是一种强大的查询语言,用于查找XML文档中的信息。...

    xml解析和生成字符串、文档的实例

    本文将深入探讨如何使用Java进行XML的解析和生成,包括处理XML字符串和XML文件。 首先,让我们从解析XML字符串开始。在Java中,我们可以使用`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`来...

    libxml2-python-2.6.11.rpm(好不容易找到的)

    1. 解析XML文档:通过读取XML文件或XML字符串,将XML数据转换为Python对象。 2. 遍历XML树:使用ElementTree API来遍历XML文档的节点结构,获取元素属性、文本内容等信息。 3. 修改XML文档:添加、删除或修改XML元素...

    libxml2-2.9.3.tar.gz

    1. **XML解析**:libxml2提供了解析XML文档的功能,能将XML字符串转换为内存中的解析树结构。解析过程支持命名空间、实体引用、DTD(Document Type Definition)等XML特性。 2. **XPath支持**:XPath是一种用于在...

    LIBXML2库windows使用指南

    在Windows平台上使用LIBXML2库进行XML文档的操作时,首先需要下载并安装LIBXML2库及其依赖项ICONV和ZLIB。以下是具体的步骤: 1. **下载LIBXML2** - 官方下载地址为[http://xmlsoft.org/](http://xmlsoft.org/),...

    libxml2-2.7.2.tar.gz.zip

    在PHP中,可以使用`libxml_use_internal_errors()`函数来控制错误处理方式,使用`simplexml_load_string()`或`DOMDocument`类来解析XML字符串或文件。同时,libxml2还提供了XML编码和解码、命名空间处理以及XML和...

    c++中使用libxml2读取xml文件

    // 临时字符串变量 char szDocName[] = "d.xml"; using std::string; using std::cout; using std::endl; doc = xmlReadFile(szDocName, "UTF-8", XML_PARSE_RECOVER); // 解析文件 if (NULL == doc) { /...

    libxml2 iconv zlib头文件和lib库(win32)

    开发者在处理跨编码的字符串时,可以利用iconv接口进行高效且准确的转换。 最后,**zlib** 是一个通用的无损数据压缩库,广泛应用于网络传输和文件存储等领域。zlib提供了包括DEFLATE算法在内的数据压缩和解压缩...

    LIBXML

    5. 编码输出:如果需要,使用`xmlDocDumpFormatMemory()`等函数将DOM树重新编码为XML字符串。 6. 错误处理:检查`xmlError`结构体以获取解析过程中的错误信息。 在压缩包文件中,"test2"可能是一个示例文件,用于...

    libxml2在linux下的使用借鉴.pdf

    xmlChar是Libxml2中的字符类型,库中所有字符、字符串都是基于这个数据类型。xmlChar的定义是unsigned char,这是考虑到它能很好地适应UTF-8编码,而UTF-8编码正是libxml2的内部编码。 xmlChar相关函数 xmlChar...

    libxml2使用示例

    1. **解析XML文档**:libxml2提供了解析XML文档的函数,如`xmlParseDoc()`和`xmlReadMemory()`,它们可以将XML字符串或文件转换为内部的树形结构,方便进一步处理。 2. **XPath查询**:XPath是一种语言,用于在XML...

    libxml2在linux下的使用文.pdf

    由于libxml2内部使用UTF-8编码,因此所有的字符和字符串处理都基于此类型。`xmlChar*`通常用来表示字符串,需要注意内存管理,使用后需手动释放。 **2.2 xmlChar相关函数** 与`char`类型相似,`xmlChar`有相应的...

    libxml2在linux下的使用.pdf

    深入学习和理解这些基本概念和函数,将有助于高效地使用Libxml2进行XML处理。在实际开发中,根据项目需求,你可能还需要掌握更多高级特性和用法,例如错误处理、内存管理策略以及特定功能的API。

    libxml2-python-2.7.7.win32-py2.7.exe

    例如,可以使用`doc = libxml2.parseDoc(xml_string)`解析XML字符串,`xpathCtx = doc.xpathNewContext()`创建XPath上下文,再通过`nodes = xpathCtx.xpathEval(xpath_expr)`执行XPath查询,从而轻松访问XML文档中的...

    libxml2.so库解析XML文件

    前者从磁盘文件读取,后者接受XML字符串和其长度。这些函数返回一个` xmlDocPtr `,它是解析后的XML文档的句柄。 3. **解析XML结构**:`xmlDocPtr`可以用来遍历XML文档的节点结构。`xmlDocGetRootElement()`函数...

Global site tag (gtag.js) - Google Analytics