|
|
function varargout = attributes(varargin) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tree = varargin{1}; |
|
|
if ~ischar(varargin{2}) || ... |
|
|
~any(strcmp(varargin{2},{'set','get','add','del','length'})) |
|
|
error('[XMLTree] Unknown method.'); |
|
|
end |
|
|
uid = varargin{3}; |
|
|
if ~isa(uid,'double') || any(uid>length(tree)) || any(uid<1) |
|
|
error('[XMLTree] UID must be a positive integer scalar.'); |
|
|
end |
|
|
|
|
|
if ~strcmp(tree.tree{uid}.type,'element') |
|
|
error('[XMLTree] This node has no attributes.'); |
|
|
end |
|
|
|
|
|
switch varargin{2} |
|
|
case 'set' |
|
|
|
|
|
if ~isa(varargin{4},'double') || ... |
|
|
any(varargin{4}>length(tree.tree{uid}.attributes)) || ... |
|
|
any(varargin{4}<1) |
|
|
error('[XMLTree] Invalid attribute indice.'); |
|
|
end |
|
|
ind = varargin{4}; |
|
|
tree.tree{uid}.attributes{ind} = struct('key',varargin{5},'val',varargin{6}); |
|
|
varargout{1} = tree; |
|
|
case 'get' |
|
|
|
|
|
if nargin == 4 |
|
|
if ischar(varargin{4}) |
|
|
for i=1:length(tree.tree{uid}.attributes) |
|
|
if strcmp(varargin{4},tree.tree{uid}.attributes{i}.key) |
|
|
varargout{1} = tree.tree{uid}.attributes{i}.val; |
|
|
return; |
|
|
end |
|
|
end |
|
|
varargout{1} = []; |
|
|
elseif ~isa(varargin{4},'double') || ... |
|
|
any(varargin{4}>length(tree.tree{uid}.attributes)) || ... |
|
|
any(varargin{4}<1) |
|
|
error('[XMLTree] Invalid attribute indice.'); |
|
|
else |
|
|
if length(varargin{4}) == 1 |
|
|
varargout{1} = tree.tree{uid}.attributes{varargin{4}(1)}; |
|
|
else |
|
|
varargout{1} = {}; |
|
|
for i=1:length(varargin{4}) |
|
|
varargout{1}{i} = tree.tree{uid}.attributes{varargin{4}(i)}; |
|
|
end |
|
|
end |
|
|
end |
|
|
else |
|
|
if length(tree.tree{uid}.attributes) == 1 |
|
|
varargout{1} = tree.tree{uid}.attributes{1}; |
|
|
else |
|
|
varargout{1} = {}; |
|
|
for i=1:length(tree.tree{uid}.attributes) |
|
|
varargout{1}{i} = tree.tree{uid}.attributes{i}; |
|
|
end |
|
|
end |
|
|
end |
|
|
case 'add' |
|
|
|
|
|
ind = length(tree.tree{uid}.attributes) + 1; |
|
|
tree.tree{uid}.attributes{ind} = struct('key',varargin{4},'val',varargin{5}); |
|
|
varargout{1} = tree; |
|
|
case 'del' |
|
|
|
|
|
if nargin == 4 |
|
|
if ~isa(varargin{4},'double') || ... |
|
|
any(varargin{4}>length(tree.tree{uid}.attributes)) || ... |
|
|
any(varargin{4}<1) |
|
|
error('[XMLTree] Invalid attribute indice.'); |
|
|
end |
|
|
ind = varargin{4}; |
|
|
tree.tree{uid}.attributes(ind) = []; |
|
|
else |
|
|
tree.tree{uid}.attributes = []; |
|
|
end |
|
|
varargout{1} = tree; |
|
|
case 'length' |
|
|
|
|
|
varargout{1} = length(tree.tree{uid}.attributes); |
|
|
otherwise |
|
|
error('[XMLTree] Unknown method.'); |
|
|
end |
|
|
|