diff -uNr a/@xmltree/find.m b/@xmltree/find.m --- a/@xmltree/find.m +++ b/@xmltree/find.m @@ -109,7 +109,7 @@ j = 1; while j <= length(i) %- Look for recursion '//' - if j1)>1 +elseif ~ischar(xmlstr) || sum(size(xmlstr)>1)>1 error('[XML] Input must be a string.') end @@ -175,11 +175,11 @@ %- Processing instruction frag = tag_pi(frag); else - if length(xmlstring)-frag.str>4 & strcmp(xmlstring(frag.str+1:frag.str+3),'!--') + if length(xmlstring)-frag.str>4 && strcmp(xmlstring(frag.str+1:frag.str+3),'!--') %- Comment frag = tag_comment(frag); else - if length(xmlstring)-frag.str>9 & strcmp(xmlstring(frag.str+1:frag.str+8),'![CDATA[') + if length(xmlstring)-frag.str>9 && strcmp(xmlstring(frag.str+1:frag.str+8),'![CDATA[') %- Litteral data frag = tag_cdata(frag); else @@ -417,5 +417,5 @@ %----------------------------------------------------------------------- function str = erode(str) - if ~isempty(str) & str(1)==' ' str(1)=''; end; - if ~isempty(str) & str(end)==' ' str(end)=''; end; + if ~isempty(str) && str(1)==' ' str(1)=''; end; + if ~isempty(str) && str(end)==' ' str(end)=''; end; diff -uNr a/@xmltree/xmltree.m b/@xmltree/xmltree.m --- a/@xmltree/xmltree.m +++ b/@xmltree/xmltree.m @@ -38,13 +38,24 @@ tree.tree = xml_parser(varargin{1}); tree.filename = ''; % Input argument is an XML filename - else - fid = fopen(varargin{1},'rt'); - if (fid == -1) - error(['[XMLTree] Cannot open ' varargin{1}]); - end - xmlstr = fscanf(fid,'%c'); - fclose(fid); + else + %xmlstr = fscanf(fid,'%c'); - fscanf - problems with + % conversion of non-ascii chars in Octave, + % other methods (fgets, fgetl) - slow + tic(); + if ~exist('OCTAVE_VERSION'), %#ok + fid = fopen(varargin{1},'rt'); + if (fid == -1) + error(['[XMLTree] Cannot open ' varargin{1}]); + end + xmlstr = fscanf(fid,'%c'); + fclose(fid); + else + [s,xmlstr] = system(['cat ' varargin{1}]); + if s~=0, + error(['[XMLTree] Cannot open ' varargin{1}]); + end + end tree.tree = xml_parser(xmlstr); tree.filename = varargin{1}; end