gpt4 book ai didi

c++ - 使用 expat startelement 处理程序 C++

转载 作者:行者123 更新时间:2023-11-30 04:37:33 26 4
gpt4 key购买 nike

我正在使用 expat 读取 xml 文件。我想从 xml 文件中指定的配置中填充我的一些类成员变量。我已经定义了我的 startelement 处理程序,

void Start(void *data,const XML_Char *el, const XML_Char **attr)

这将被引用如下:

XML_SetElementHandler(parser,Start, NULL);

目前我正在使用全局结构 g_stConfigInfo 将所有值存储在 Start()

例如,

void Start(void *data,const XML_Char *el, const XML_Char **attr)
{
if( _tcscmp(el,_T("blah"))==0 )
{
for (int i=0; attr[i]; i+=2)
{
if(_tcscmp(attr[i],_T("name"))==0)
{
g_stConfigInfo.sInputName = attr[i+1];
}
.........

然后我在做 myclass.sInputName = g_stConfigInfo.sInputname

我宁愿不使用全局变量,而是能够使它成为需要填充其成员变量的类的成员函数。 我也不想在 Start() 中有此类的实例。执行此操作的最佳方法是什么?

最佳答案

我以前没有使用过 Expat,但我认为使用 XML_SetUserData 是您想要的。

class my_data
{
public:
static void start_callback(void *data, const XML_Char *el, const XML_Char **attr)
{
static_cast<my_data*>(data)->start(el, attr);
}

void start(const XML_Char *el, const XML_Char **attr);
};

//...
my_data data;
XML_SetUserData(parser, &data);
XML_SetElementHandler(parser, my_data::start_callback, NULL);

SetUserData 将使解析器将您提供给它的指针传递给任何处理程序回调。 http://www.xml.com/pub/a/1999/09/expat/index.html?page=3#setuserdata

关于c++ - 使用 expat startelement 处理程序 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3778893/

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