0

我有一个这样的构造函数:

function p = class_name(folder, file_name)

    xmlfile = fullfile(folder, file_name);
    xDoc = xmlread(xmlfile);

        struct = xml2struct(xDoc);

        %lots of repetitive code

end

它读取 XML 文件并将其转换为结构。然后使用一些重复的代码将结构元素分配给类的属性/字段,如下所示:

if(isfield(struct.parameters, 'parameter_name'))
    p.property_name = struct.parameters.parameter_name.Text;
else
    p.property_name = '';
end

我想把它放到一个方法/函数中,给定结构元素的名称(这里是'parameter_name')和类字段/属性的名称(这里是'property_name')将前者分配给后者。

是否可以为此编写通用函数/方法?谢谢。

4

3 回答 3

4

您可以使用动态字段名称来实现这样的功能。这是针对此类情况的推荐实现:

function p = setparam(s, p, param_name, prop_name)
    if(isfield(s.parameters, param_name))
       param = s.parameters.(param_name);
       p.(prop_name) = param.Text;
    else
       p.(prop_name) = '';
    end
end

您还可以在旧版本的 MATLAB 上使用 setfield 和 getfield:

function p = setparam(s, p, param_name, prop_name)
    if(isfield(s.parameters, param_name))
        param = getfield(s.parameters, param_name);
        p = setfield(p, prop_name, getfield(param, 'Text'));
    else
        p = setfield(p, prop_name, '');
    end
end

不要在代码中使用 struct 作为结构名称 - 它是保留关键字。

于 2012-09-12T09:35:57.787 回答
1

使用动态字段名称:

yourStruct.parameters.('parameter_name')
于 2012-09-12T09:50:46.510 回答
0

这是一个通用函数:可用于结构或类对象

function obj_to = set_props(obj_to, obj_from)
% insert properties from obj_from into obj_to. 
props_from = fieldnames(obj_from);
props_to = fieldnames(obj_to);
for k = 1 : length(props_to)
    if ismember(props_to{k}, props_from)
        obj_to.(props_to{k}) = obj_from.(props_to{k});
    else
        obj_to.(props_to{k}) = '';
    end
end

现在,在构造函数中:

function obj = class_name(folder, file_name)
    xmlfile = fullfile(folder, file_name);
    xDoc = xmlread(xmlfile);
    s = xml2struct(xDoc); % do not use word "struct" for variables
    set_props(obj, s);    % if obj has handle, no need to return it from set_props()
end
于 2012-09-13T18:30:15.273 回答