function tree = xmltree(varargin) % XMLTREE/XMLTREE Constructor of the XMLTree class % FORMAT tree = xmltree(varargin) % % varargin - XML filename or XML string % tree - XMLTree Object % % tree = xmltree; % creates a minimal XML tree: '' % tree = xmltree('foo.xml'); % creates a tree from XML file 'foo.xml' % tree = xmltree('content') % creates a tree from string %__________________________________________________________________________ % % This is the constructor of the XMLTree class. % It creates a tree of an XML 1.0 file (after parsing) that is stored % using a Document Object Model (DOM) representation. % See http://www.w3.org/TR/REC-xml for details about XML 1.0. % See http://www.w3.org/DOM/ for details about DOM platform. %__________________________________________________________________________ % Copyright (C) 2002-2011 http://www.artefact.tk/ % Guillaume Flandin % $Id: xmltree.m 4460 2011-09-05 14:52:16Z guillaume $ switch(nargin) case 0 tree.tree{1} = struct('type','element',... 'name','tag',... 'attributes',[],... 'contents',[],... 'parent',[],... 'uid',1); tree.filename = ''; tree = class(tree,'xmltree'); case 1 if isa(varargin{1},'xmltree') tree = varargin{1}; elseif ischar(varargin{1}) % Input argument is an XML string if (~exist(varargin{1},'file') && ... ~isempty(xml_findstr(varargin{1},'<',1,1))) tree.tree = xml_parser(varargin{1}); tree.filename = ''; % Input argument is an XML filename else if isempty(regexp(varargin{1},'^http://'))%ordinary file (not OpenDAP) fid = fopen(varargin{1},'rt'); if (fid == -1) error(['[XMLTree] Cannot open ' varargin{1}]); end xmlstr = fread(fid,'*char')'; %xmlstr = fscanf(fid,'%c'); fclose(fid); else xmlstr=webread(varargin{1});%OpenDAP case end tree.tree = xml_parser(xmlstr); tree.filename = varargin{1}; end tree = class(tree,'xmltree'); else error('[XMLTree] Bad input argument'); end otherwise error('[XMLTree] Too many input arguments'); end