0001
0002 function theStruct = parseXML(filename)
0003
0004 try
0005 tree = xmlread(filename);
0006 catch
0007 error('Failed to read XML file %s.',filename);
0008 end
0009
0010
0011
0012 try
0013 theStruct = parseChildNodes(tree);
0014 catch
0015 error('Unable to parse XML file %s.');
0016 end
0017
0018
0019
0020 function children = parseChildNodes(theNode)
0021
0022 children = [];
0023 if theNode.hasChildNodes
0024 childNodes = theNode.getChildNodes;
0025 numChildNodes = childNodes.getLength;
0026 allocCell = cell(1, numChildNodes);
0027
0028 children = struct( ...
0029 'Name', allocCell, 'Attributes', allocCell, ...
0030 'Data', allocCell, 'Children', allocCell);
0031
0032 for count = 1:numChildNodes
0033 theChild = childNodes.item(count-1);
0034 children(count) = makeStructFromNode(theChild);
0035 end
0036 end
0037
0038
0039 function nodeStruct = makeStructFromNode(theNode)
0040
0041
0042 nodeStruct = struct( ...
0043 'Name', char(theNode.getNodeName), ...
0044 'Attributes', parseAttributes(theNode), ...
0045 'Data', '', ...
0046 'Children', parseChildNodes(theNode));
0047
0048 if any(strcmp(methods(theNode), 'getData'))
0049 nodeStruct.Data = char(theNode.getData);
0050 else
0051 nodeStruct.Data = '';
0052 end
0053
0054
0055 function attributes = parseAttributes(theNode)
0056
0057
0058 attributes = [];
0059 if theNode.hasAttributes
0060 theAttributes = theNode.getAttributes;
0061 numAttributes = theAttributes.getLength;
0062 allocCell = cell(1, numAttributes);
0063 attributes = struct('Name', allocCell, 'Value', allocCell);
0064
0065 for count = 1:numAttributes
0066 attrib = theAttributes.item(count-1);
0067 attributes(count).Name = char(attrib.getName);
0068 attributes(count).Value = char(attrib.getValue);
0069 end
0070 end