gpt4 book ai didi

c++ - 请求完整的、可编译的 libxml2 sax 示例

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:48:58 25 4
gpt4 key购买 nike

我费了好大劲才弄清楚如何使用 libxml2 的 sax 解析器。有人可以发布一个解析此 XML 的示例吗(是的,没有 <xml...> 页眉和页脚标记,如果 libxml2 sax 解析器可以解析的话):

<hello foo="bar">world</hello>

解析器应该打印出包含在元素 hello 中的数据并获取属性值 foo .

我正在研究这个例子,但希望其他人比我抢先一步,因为我没有取得太大进展。 Google 尚未为 libxml2 sax 解析器提供任何完整的工作示例。

最佳答案

改编自http://julp.developpez.com/c/libxml2/?page=sax

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <libxml/tree.h>
#include <libxml/parser.h>
#include <libxml/parserInternals.h>


void start_element_callback(void *user_data, const xmlChar *name, const xmlChar **attrs) {
printf("Beginning of element : %s \n", name);
while (NULL != attrs && NULL != attrs[0]) {
printf("attribute: %s=%s\n",attrs[0],attrs[1]);
attrs = &attrs[2];
}
}

int main() {
const char* xml_path = "hello_world.xml";
FILE *xml_fh = fopen(xml_path,"w+");
fputs("<hello foo=\"bar\" baz=\"baa\">world</hello>",xml_fh);
fclose(xml_fh);


// Initialize all fields to zero
xmlSAXHandler sh = { 0 };

// register callback
sh.startElement = start_element_callback;

xmlParserCtxtPtr ctxt;

// create the context
if ((ctxt = xmlCreateFileParserCtxt(xml_path)) == NULL) {
fprintf(stderr, "Erreur lors de la création du contexte\n");
return EXIT_FAILURE;
}
// register sax handler with the context
ctxt->sax = &sh;

// parse the doc
xmlParseDocument(ctxt);
// well-formed document?
if (ctxt->wellFormed) {
printf("XML Document is well formed\n");
} else {
fprintf(stderr, "XML Document isn't well formed\n");
//xmlFreeParserCtxt(ctxt);
return EXIT_FAILURE;
}

// free the memory
// xmlFreeParserCtxt(ctxt);


return EXIT_SUCCESS;
}

这会产生输出:

Beginning of element : hello 
attribute: foo=bar
attribute: baz=baa
XML Document is well formed

在 Ubuntu 10.04.1 上使用以下命令编译:

g++ -I/usr/include/libxml2 libxml2_hello_world.cpp /usr/lib/libxml2.a -lz\
-o libxml2_hello_world

关于c++ - 请求完整的、可编译的 libxml2 sax 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3959987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com