我正在使用 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/