| | function varargout = save(tree, filename) |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| |
|
| |
|
| | |
| |
|
| | prolog = '<?xml version="1.0" ?>\n'; |
| |
|
| | |
| | if nargin == 1 |
| | varargout{1} = [sprintf(prolog) ... |
| | print_subtree(tree,'',root(tree))]; |
| | |
| | else |
| | |
| | if ischar(filename) |
| | [fid, msg] = fopen(filename,'w'); |
| | if fid==-1, error(msg); end |
| | if isempty(tree.filename), tree.filename = filename; end |
| | |
| | elseif isnumeric(filename) && numel(filename) == 1 |
| | fid = filename; |
| | prolog = ''; |
| | else |
| | error('[XMLTree] Invalid argument.'); |
| | end |
| | fprintf(fid,prolog); |
| | save_subtree(tree,fid,root(tree)); |
| | if ischar(filename), fclose(fid); end |
| | if nargout == 1 |
| | varargout{1} = print_subtree(tree,'',root(tree)); |
| | end |
| | end |
| |
|
| | |
| | function xmlstr = print_subtree(tree,xmlstr,uid,order) |
| | if nargin < 4, order = 0; end |
| | xmlstr = [xmlstr blanks(3*order)]; |
| | switch tree.tree{uid}.type |
| | case 'element' |
| | xmlstr = sprintf('%s<%s',xmlstr,tree.tree{uid}.name); |
| | for i=1:length(tree.tree{uid}.attributes) |
| | xmlstr = sprintf('%s %s="%s"', xmlstr, ... |
| | tree.tree{uid}.attributes{i}.key,... |
| | tree.tree{uid}.attributes{i}.val); |
| | end |
| | if isempty(tree.tree{uid}.contents) |
| | xmlstr = sprintf('%s/>\n',xmlstr); |
| | else |
| | xmlstr = sprintf('%s>\n',xmlstr); |
| | for i=1:length(tree.tree{uid}.contents) |
| | xmlstr = print_subtree(tree,xmlstr, ... |
| | tree.tree{uid}.contents(i),order+1); |
| | end |
| | xmlstr = [xmlstr blanks(3*order)]; |
| | xmlstr = sprintf('%s</%s>\n',xmlstr,... |
| | tree.tree{uid}.name); |
| | end |
| | case 'chardata' |
| | xmlstr = sprintf('%s%s\n',xmlstr, ... |
| | entity(tree.tree{uid}.value)); |
| | case 'cdata' |
| | xmlstr = sprintf('%s<![CDATA[%s]]>\n',xmlstr, ... |
| | tree.tree{uid}.value); |
| | case 'pi' |
| | xmlstr = sprintf('%s<?%s %s?>\n',xmlstr, ... |
| | tree.tree{uid}.target, tree.tree{uid}.value); |
| | case 'comment' |
| | xmlstr = sprintf('%s<!-- %s -->\n',xmlstr,... |
| | tree.tree{uid}.value); |
| | otherwise |
| | warning(sprintf('Type %s unknown: not saved', ... |
| | tree.tree{uid}.type)); |
| | end |
| |
|
| | |
| | function save_subtree(tree,fid,uid,order) |
| | if nargin < 4, order = 0; end |
| | fprintf(fid,blanks(3*order)); |
| | switch tree.tree{uid}.type |
| | case 'element' |
| | fprintf(fid,'<%s',tree.tree{uid}.name); |
| | for i=1:length(tree.tree{uid}.attributes) |
| | fprintf(fid,' %s="%s"',... |
| | tree.tree{uid}.attributes{i}.key, ... |
| | tree.tree{uid}.attributes{i}.val); |
| | end |
| | if isempty(tree.tree{uid}.contents) |
| | fprintf(fid,'/>\n'); |
| | else |
| | fprintf(fid,'>\n'); |
| | for i=1:length(tree.tree{uid}.contents) |
| | save_subtree(tree,fid,... |
| | tree.tree{uid}.contents(i),order+1) |
| | end |
| | fprintf(fid,blanks(3*order)); |
| | fprintf(fid,'</%s>\n',tree.tree{uid}.name); |
| | end |
| | case 'chardata' |
| | fprintf(fid,'%s\n',entity(tree.tree{uid}.value)); |
| | case 'cdata' |
| | fprintf(fid,'<![CDATA[%s]]>\n',tree.tree{uid}.value); |
| | case 'pi' |
| | fprintf(fid,'<?%s %s?>\n',tree.tree{uid}.target, ... |
| | tree.tree{uid}.value); |
| | case 'comment' |
| | fprintf(fid,'<!-- %s -->\n',tree.tree{uid}.value); |
| | otherwise |
| | warning(sprintf('[XMLTree] Type %s unknown: not saved', ... |
| | tree.tree{uid}.type)); |
| | end |
| |
|
| |
|
| | |
| | function str = entity(str) |
| | |
| | str = char(strrep(cellstr(str), '&', '&' )); |
| | str = char(strrep(cellstr(str), '<', '<' )); |
| | str = char(strrep(cellstr(str), '>', '>' )); |
| | str = char(strrep(cellstr(str), '"', '"')); |
| | str = char(strrep(cellstr(str), '''', ''')); |
| |
|