⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfbox_mat2xml.m

📁 toolbox for spm 5 for data, model free analysis
💻 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 + -