📄 mfbox_mat2xml.m
字号:
function xml=mfbox_mat2xml(mat,varname,depth)% Copyright by Peter Gruber % Signal Processing & Information Theory group% Institute of Biophysics, University of Regensburg, Germany% Homepage: http://research.fabian.theis.name% http://www-aglang.uni-regensburg.de%% This file is free software, subject to the % GNU GENERAL PUBLIC LICENSE, see gpl.txt% mat2xml converts structured variable mat into xml string%% inspired by Jonas Almeida, almeidaj@musc.edu, 20 Aug 2002, xml4mat Tboxif (nargin<2), varname = 'ans'; end % if not provided make it a matlab answer variableif (nargin<3), depth = 0; end w = whos('mat');w.name = varname;xml = cell(3,1);if (strcmp(w.class,'char')) xml{1} = sprintf('<%s name="%s" size="%s">',w.class, ... w.name,strip(sprintf('%d ',w.size))); xml{2} = spcharin(mat(:)'); xml{3} = sprintf('</%s>',w.class);elseif (strcmp(w.class,'struct')) xml{1} = sprintf('<%s name="%s" size="%s">',w.class, ... w.name,strip(sprintf('%d ',w.size))); names = fieldnames(mat); Txml = cell(length(names),prod(w.size)); for i=1:prod(w.size) for j=1:length(names) Txml{j,i} = mfbox_mat2xml(mat(i).(names{j}),names{j},depth+1); end end xml{2} = cat(2,Txml{:}); xml{3} = sprintf('</%s>',w.class);elseif (strcmp(w.class,'cell')) xml{1} = sprintf('<%s name="%s" size="%s">',w.class, ... w.name,strip(sprintf('%d ',w.size))); Txml = cell(prod(w.size),1); for i=1:prod(w.size) Txml{i} = mfbox_mat2xml(mat{i},'cell',depth+1); end xml{2} = cat(2,Txml{:}); xml{3} = sprintf('</%s>',w.class);elseif (strcmp(w.class,'double') || strcmp(w.class,'float')) w.class = 'double'; xml{1} = sprintf('<%s name="%s" size="%s">',w.class, ... w.name,strip(sprintf('%d ',w.size))); if (w.complex) v = [real(mat(:)');imag(mat(:)')]; xml{2} = strip(sprintf('%e+%ei ',v(:)')); else xml{2} = strip(sprintf('%e ',mat(:)')); end xml{3} = sprintf('</%s>',w.class);elseif (strcmp(w.class,'int32') || strcmp(w.class,'int16') || strcmp(w.class,'int8')) w.class = 'int32'; xml{1} = sprintf('<%s name="%s" size="%s">',w.class, ... w.name,strip(sprintf('%d ',w.size))); xml{2} = strip(sprintf('%d ',mat(:)')); xml{3} = sprintf('</%s>',w.class);elseif (strcmp(w.class,'logical')) xml{1} = sprintf('<%s name="%s" size="%s">',w.class, ... w.name,strip(sprintf('%d ',w.size))); xml{2} = strip(sprintf('%d ',mat(:)')); xml{3} = sprintf('</%s>',w.class);endxml = cat(2,xml{:});xml = regexprep(xml,'\s{2,}',' ');if (depth==0) xml = sprintf('<?xml version="1.0" encoding="UTF-8"?><mfbox xmlns="http://mfbox.sf.net/mfbox">%s</mfbox>',xml);endreturnfunction b=strip(b)spc = isspace(b(:));if (all(~spc)) returnende = length(b);s = find(~spc,1);e = e+1-find(~spc(end:-1:s),1);b = b(s:e);function y=spcharin(x)if (iscell(x)) n = length(x); y = cell(size(x)); for i=1:n y(i) = {spcharin(x{i})}; end elseif (ischar(x)) ascii = x*1;% Find special characters sp = find((~((x>47&x<58)|(x>96&x<123)|(x>64&x<91)))|x==59|x==35); if (length(sp)>0) T = cell(2,length(sp)+1); if (sp(1)>1) T{1,1} = x(1:(sp(1)-1)); else T{1,1} = ''; end for i=1:(length(sp)-1) if (sp(i)+1~=sp(i+1)) T{1,i+1} = x((sp(i)+1):(sp(i+1)-1)); else T{1,i+1} = ''; end end if (sp(end)<length(x)) T{1,end} = x((sp(end)+1):end); else T{1,end} = ''; end for i=1:length(sp) T{2,i} = sprintf('#%02d;',ascii(sp(i))); end T{2,end} = ''; y = cat(2,T{:}); else y = x; endelse w = whos('x') error(['string expected, ',w.class',' found instead'])end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -