0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 function varargout = editxml(varargin)
0026
0027
0028 gui_Singleton = 1;
0029 gui_State = struct('gui_Name', mfilename, ...
0030 'gui_Singleton', gui_Singleton, ...
0031 'gui_OpeningFcn', @editxml_OpeningFcn, ...
0032 'gui_OutputFcn', @editxml_OutputFcn, ...
0033 'gui_LayoutFcn', [] , ...
0034 'gui_Callback', []);
0035 if nargin & isstr(varargin{1})
0036 gui_State.gui_Callback = str2func(varargin{1});
0037 end
0038
0039 if nargout
0040 [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
0041 else
0042 gui_mainfcn(gui_State, varargin{:});
0043 end
0044
0045
0046
0047
0048 function editxml_OpeningFcn(hObject, eventdata, handles, varargin)
0049
0050
0051
0052
0053
0054
0055
0056 if nargin
0057 CurrentFile=varargin{1}
0058 else
0059 CurrentFile=[];
0060 end
0061
0062
0063
0064
0065
0066
0067 handles.output = hObject;
0068
0069 if exist(CurrentFile,'file')
0070 [PathName,Nme,FileExt]=fileparts(CurrentFile);
0071 if isequal(FileExt,'.xls')
0072 DataIn.hfig_xls=read_xls(CurrentFile);
0073 DataIn.CurrentUid=1;
0074 figpos=get(hObject,'Position');
0075 figposunit=get(hObject,'Units');
0076 newfigpos=[figpos(1)-0.5*figpos(3) figpos(2) figpos(3) figpos(4)];
0077 set(DataIn.hfig_xls,'Units',figposunit)
0078 set(DataIn.hfig_xls,'Position',newfigpos);
0079 set(hObject,'UserData',DataIn)
0080 else
0081 set(handles.CurrentFile,'String',CurrentFile)
0082 CurrentFile_Callback(hObject, eventdata, handles)
0083 end
0084 end
0085
0086 guidata(hObject, handles);
0087
0088
0089
0090 function varargout = editxml_OutputFcn(hObject, eventdata, handles)
0091
0092
0093
0094
0095
0096
0097 varargout{1} = handles.output;
0098
0099
0100
0101 function list_element_Callback(hObject, eventdata, handles)
0102 global t xs t_ref
0103 CurrentFile=get(handles.CurrentFile,'String');
0104 bla=get(hObject,'String');
0105 ind=get(hObject,'Value');
0106 list=get(hObject,'UserData');
0107 NewRootUid=list.uid(ind);
0108 heditxml=get(hObject,'Parent');
0109 DataIn=get(heditxml,'UserData');
0110 if ~isempty(xs)
0111 xs_node=list.xs_uid(ind);
0112 [nodeup,path,xs_element,xs_subelem]=scan_schema(xs,xs_node);
0113 [element,subelem]=get_xml(t,path,xs_element,NewRootUid,xs_subelem);
0114 update_list(handles,path,xs_element,element,NewRootUid,xs_subelem,subelem);
0115 if xs_element.subtest
0116 DataIn.CurrentUid=[DataIn.CurrentUid NewRootUid];
0117 DataIn.xs_CurrentUid=[DataIn.xs_CurrentUid xs_node];
0118 end
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130 set(get(hObject,'Parent'),'UserData',DataIn);
0131 else
0132 [DataIn,testsimple]=displ_xml(handles,t,NewRootUid,DataIn,get(hObject,'parent'));
0133 if ~testsimple
0134 DataIn.CurrentUid=[DataIn.CurrentUid NewRootUid];
0135 set(get(hObject,'Parent'),'UserData',DataIn);
0136 end
0137 end
0138
0139
0140
0141 function move_up_Callback(hObject, eventdata, handles)
0142 global t xs t_ref
0143 set(handles.export_list,'Value',1);
0144 set(handles.export_list,'String','');
0145 CurrentFile=get(handles.CurrentFile,'String');
0146 CurrentElement=get(handles.CurrentElement,'String');
0147 heditxml=get(handles.move_up,'parent');
0148 test_root=0;
0149 DataIn=get(heditxml,'UserData');
0150 if isfield(DataIn,'CurrentUid')&length(DataIn.CurrentUid)>1
0151 nodeup=DataIn.CurrentUid(end-1);
0152 DataIn.CurrentUid(end)=[];
0153 else
0154 nodeup=[];
0155 end
0156 if isempty(xs)
0157 if isempty(nodeup)
0158 test_root=1;
0159 else
0160 DataIn=displ_xml(handles,t,nodeup,DataIn,heditxml);
0161 end
0162 else
0163 xs_nodeup=[];
0164
0165 if isfield(DataIn,'xs_CurrentUid')&length(DataIn.xs_CurrentUid)>1
0166
0167 xs_nodeup=DataIn.xs_CurrentUid(end-1);
0168 DataIn.xs_CurrentUid(end)=[];
0169 end
0170 if isempty(xs_nodeup)
0171 test_root=1;
0172 else
0173 [xs_nodeup,path,xs_element,xs_subelem]=scan_schema(xs,xs_nodeup);
0174 [element,subelem]=get_xml(t,path,xs_element,nodeup,xs_subelem);
0175 update_list(handles,path,xs_element,element,nodeup,xs_subelem,subelem);
0176
0177 if isfield(DataIn,'h_ref')&ishandle(DataIn.h_ref)
0178 [ref_element,ref_subelem]=get_xml(t_ref,path,xs_element,nodeup,xs_subelem);
0179 update_ref_list(DataIn.h_ref,xs_element,ref_element,nodeup,xs_subelem,ref_subelem);
0180 end
0181 end
0182 set(get(hObject,'parent'),'UserData',DataIn);
0183 end
0184 if test_root
0185 testupfile=0;
0186 DataIn=get(get(hObject,'parent'),'UserData');
0187 if isfield(DataIn,'UpFile')&~isempty(DataIn.UpFile)
0188 [UpPath,UpName,UpExt]=fileparts(DataIn.UpFile{1});
0189 if isequal(UpExt,'.xml')
0190 set(handles.CurrentFile,'String',DataIn.UpFile{1})
0191 CurrentFile_Callback(handles.CurrentFile,[],handles)
0192 testupfile=1;
0193 DataIn.UpFile{1}={};
0194 end
0195 end
0196 if ~testupfile
0197 RootPath=fileparts(CurrentFile);
0198 [FileName, PathName]=uigetfile( ...
0199 {'*.xml', '(*.xml)';
0200 '*.xml', '.xml files '; ...
0201 '*.*', 'All Files (*.*)'}, ...
0202 'Pick a file',RootPath);
0203 fileinput_new=fullfile(PathName,FileName);
0204 set(handles.CurrentFile,'String',fileinput_new)
0205 CurrentFile_Callback(handles.CurrentFile,[],handles)
0206 end
0207 end
0208 set(heditxml,'UserData',DataIn);
0209
0210
0211 function element_value_Callback(hObject, eventdata, handles)
0212
0213 global t xs
0214 if isequal(get(handles.element_value,'ForegroundColor'),[0.7 0.7 0.7])
0215 return
0216 end
0217 list_enum=get(handles.element_value,'String');
0218 list_index=get(handles.element_value,'Value');
0219 if iscell(list_enum)
0220 value=list_enum{list_index};
0221 else
0222 value=list_enum;
0223 end
0224 heditxml=get(handles.element_value,'Parent');
0225 DataIn=get(heditxml,'UserData');
0226
0227 LengthElement=length(DataIn.CurrentUid);
0228 FilledUid=find(DataIn.CurrentUid~=0);
0229 LengthFilled=FilledUid(end);
0230 for irank=LengthFilled+1:LengthElement
0231 attrib=attributes(xs,'get',DataIn.xs_CurrentUid(irank),1);
0232 [t,DataIn.CurrentUid(irank)]=add(t,DataIn.CurrentUid(irank-1),'element',attrib.val);
0233 end
0234 node_element=get(handles.element_value,'UserData');
0235 element_key=get(handles.element_key,'String');
0236 t=set_element(t,DataIn.CurrentUid(end),node_element,element_key,value);
0237
0238 set(heditxml,'UserData',DataIn)
0239
0240 [nodeup,path,xs_element,xs_subelem]=scan_schema(xs,DataIn.xs_CurrentUid(end));
0241 [element,subelem]=get_xml(t,path,xs_element,DataIn.CurrentUid(end),xs_subelem);
0242 element_index=get(handles.list_element,'Value');
0243 update_list(handles,path,xs_element,element,DataIn.CurrentUid(end),xs_subelem,subelem);
0244 set(handles.list_element,'Value',element_index);
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271 function browser_Callback(hObject, eventdata, handles)
0272
0273 heditxml=get(hObject,'parent');
0274 DataIn=get(heditxml,'UserData');
0275 CurrentFile=get(handles.CurrentFile,'String');
0276 DataIn.Schema=[];
0277 [FileName, PathName]=uigetfile( ...
0278 {'*.xml;*.xls','(*.xml,*.xls)';
0279 '*.xml', '.xml files '; ...
0280 '*.xls', '.xls files '; ...
0281 '*.*', 'All Files (*.*)'}, ...
0282 'Pick a file',CurrentFile);
0283 CurrentFile=fullfile(PathName,FileName);
0284 sizf=size(CurrentFile);
0285 if (~ischar(CurrentFile)|~isequal(sizf(1),1)),return;end
0286 if exist(CurrentFile,'file')
0287
0288 [CurPath,CurName,CurExt]=fileparts(CurrentFile);
0289 if isequal(CurExt,'.xls')
0290 if isfield(DataIn,'hfig_xls')&ishandle(DataIn.hfig_xls)
0291 [hfig_xls]=read_xls(CurrentFile,DataIn.hfig_xls);
0292 else
0293 [hfig_xls]=read_xls(CurrentFile);
0294 end
0295 figpos=get(heditxml,'Position');
0296 newfigpos=[figpos(1)-0.25*figpos(3) figpos(2) 0.5*figpos(3) 0.5*figpos(4)];
0297 set(hfig_xls,'Position',newfigpos)
0298 else
0299 set(handles.CurrentFile,'String',CurrentFile)
0300 CurrentFile_Callback(hObject, eventdata, handles)
0301 end
0302 end
0303
0304
0305 function CurrentFile_Callback(hObject, eventdata, handles)
0306 global t xs
0307 CurrentFile=get(handles.CurrentFile,'String');
0308 heditxml=get(handles.CurrentFile,'parent');
0309 DataIn=get(heditxml,'UserData');
0310 t=xmltree(CurrentFile);
0311 head_element=get(t,1);
0312 if ~isfield(head_element,'name') | ~isfield(head_element,'attributes')
0313 warndlg_uvmat('root element of the .xml file not in correct format','ERROR')
0314 end
0315 head_name=head_element.name;
0316 head_attr=head_element.attributes;
0317 xstest=0;
0318 for iattr=1:length(head_attr)
0319 if isequal(head_attr{iattr}.key,'xmlns:xsi')& isequal(head_attr{iattr}.val,'none')
0320 xs=[];
0321
0322 end
0323 if isequal(head_attr{iattr}.key,'xsi:noNamespaceSchemaLocation') & exist(head_attr{iattr}.val,'file')
0324 DataIn.Schema=head_attr{iattr}.val;
0325 xs=xmltree(DataIn.Schema);
0326 xstest=1;
0327 end
0328 end
0329 if xstest==0
0330 head_name=get(t,1,'name');
0331
0332 path_uvmat=which('editxml');
0333 path_UVMAT=fileparts(path_uvmat);
0334 if isunix
0335 xmlparam=fullfile(path_UVMAT,'PARAM_LINUX.xml')
0336 if exist(xmlparam,'file')
0337 tparam=xmltree(xmlparam);
0338 sparam=convert(tparam);
0339 if isfield(sparam,'SchemaPath')
0340 schemapath=[fullfile(sparam.SchemaPath,head_name) '.xsd']
0341 end
0342 end
0343
0344 else
0345 xmlparam=fullfile(path_UVMAT,'PARAM_WIN.xml')
0346 if exist(xmlparam,'file')
0347 tparam=xmltree(xmlparam);
0348 sparam=convert(tparam)
0349 if isfield(sparam,'SchemaPath')
0350 schemapath=[fullfile(sparam.SchemaPath,head_name) '.xsd']
0351 end
0352 end
0353
0354 end
0355 if exist(schemapath,'file')
0356 xs=xmltree(schemapath);
0357 else
0358 warndlg_uvmat(['The xml schema for ' CurrentFile ' is unknown, check the schema path set in the xml file PARAM'],'ERROR')
0359 [FileName, PathName]=uigetfile( ...
0360 {'*.xsd', '(*.xsd)';
0361 '*.xsd', '.xsd files '; ...
0362 '*.*', 'All Files (*.*)'}, ...
0363 ['Pick a .xsd schema'] ,schemapath);
0364 if ischar(PathName)&ischar(FileName)& exist(fullfile(PathName,FileName),'file')
0365 DataIn.Schema=fullfile(PathName,FileName);
0366 xs=xmltree(DataIn.Schema);
0367 else
0368 xs=[];
0369 end
0370 end
0371 end
0372 DataIn.CurrentUid=1;
0373 if isempty(xs)
0374 displ_xml(handles,t,1,DataIn,get(hObject,'parent'));
0375
0376
0377 else
0378 DataIn.xs_CurrentUid=find(xs,'/xs:schema/xs:element');
0379 [nodeup,path,xs_element,xs_subelem]=scan_schema(xs,DataIn.xs_CurrentUid);
0380 [element,subelem]=get_xml(t,path,xs_element,1,xs_subelem);
0381 update_list(handles,path,xs_element,element,1,xs_subelem,subelem);
0382
0383
0384 end
0385 set(heditxml,'UserData',DataIn);
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409
0410
0411
0412 function [nodeup,path,xs_element,xs_subelem]=scan_schema(xs,nodeinput)
0413 nodeup=[];
0414 path=[];
0415 xs_element.key=[];
0416 xs_element.type=[];
0417 xs_element.annot=[];
0418 xs_element.attrib=[];
0419 xs_element.subtest=0;
0420 xs_element.enum={};
0421 xs_subelem=[];
0422
0423 if ~exist('nodeinput') | isempty(nodeinput)
0424 node=find(xs,'/xs:schema/xs:element');
0425 else
0426 node=nodeinput;
0427 end
0428 xs_element.uid=node;
0429
0430 node_content=get(xs,node);
0431 if isempty(node_content),return,end;
0432 if ~isempty(node_content) & isfield(node_content,'attributes')
0433 attrib=node_content.attributes;
0434 for iattr=1:length(attrib)
0435 struct=attrib{iattr};
0436 if isequal(struct.key,'name')
0437 xs_element.key=struct.val;
0438 elseif isequal(struct.key,'type')
0439 xs_element.type=struct.val;
0440 end
0441 end
0442 end
0443
0444
0445 if ~isempty(node_content)
0446 nodeup=get(xs,node,'parent');
0447 if ~isempty(nodeup)
0448 nodeup=get(xs,nodeup(1),'parent');
0449 if isequal(nodeup,[])
0450
0451 up=0;
0452 else
0453 nodeup=get(xs,nodeup(1),'parent');
0454 end
0455 end
0456 end
0457
0458 up=1;
0459 path=[];
0460 if ~isempty(nodeup)
0461 attrib=attributes(xs,'get',nodeup,1);
0462 path=attrib.val;
0463 nodeup2=nodeup;
0464 while up==1;
0465 nodeup2=get(xs,nodeup2(1),'parent');
0466 nodeup2=get(xs,nodeup2(1),'parent');
0467 if isempty(nodeup2)
0468 up=0;
0469 else
0470 nodeup2=get(xs,nodeup2(1),'parent');
0471 if isempty(nodeup2)
0472 up=0;
0473 else
0474 attrib=attributes(xs,'get',nodeup2,1);
0475 path=[attrib.val '/' path];
0476 end
0477 end
0478 end
0479 end
0480
0481
0482 node1=children(xs,node);
0483 test_sub=0;
0484 comment='';
0485 element={};
0486 minOccurs={};
0487 maxOccurs={};
0488 testsub={};
0489 list_menu={};
0490 text={};
0491 if ~isempty(node1)
0492 for i=1:length(node1)
0493 nodename1=get(xs,node1(i),'name');
0494 node2=children(xs,node1(i));
0495 if isequal(nodename1,'xs:annotation')
0496 for j=1:length(node2)
0497 nodename2=get(xs,node2(j),'name');
0498 if isequal(nodename2,'xs:documentation')
0499 node3=children(xs,node2(j));
0500 xs_element.annot=get(xs,node3,'value');
0501 end
0502 end
0503
0504 elseif isequal(nodename1,'xs:simpleType')
0505 for j=1:length(node2)
0506 nodename2=get(xs,node2(j),'name');
0507 if isequal(nodename2,'xs:restriction')
0508 node3=children(xs,node2(j));
0509 for k=1:length(node3)
0510 nodename3=get(xs,node3(k),'name');
0511 if isequal(nodename3,'xs:enumeration')
0512 node3_content=get(xs,node3(k));
0513 attr=node3_content.attributes;
0514 for m=1:length(attr)
0515 struct=attr{m};
0516 if isequal(struct.key,'value')
0517 xs_element.enum{k}=struct.val;
0518 end
0519 end
0520 end
0521 end
0522 end
0523 end
0524 elseif isequal(nodename1,'xs:complexType')
0525 for j=1:length(node2)
0526 nodename2=get(xs,node2(j),'name');
0527 if isequal(nodename2,'xs:attribute')
0528 node_content=get(xs,node2(j));
0529 attr=node_content.attributes;
0530 for k=1:length(attr)
0531 struct=attr{k};
0532 if isequal(struct.key,'name')
0533 xs_element.attrib=struct.val;
0534 end
0535 end
0536 elseif isequal(nodename2,'xs:sequence')
0537 xs_element.subtest=1;
0538 node3=children(xs,node2(j));
0539 for k=1:length(node3)
0540 xs_subelem(k).node=node3(k);
0541 xs_subelem(k).testsub=0;
0542 node_content=get(xs,node3(k));
0543 xs_subelem(k).minOccurs=1;
0544 xs_subelem(k).maxOccurs=1;
0545
0546 if isequal(node_content.name,'xs:element')
0547 attr=node_content.attributes;
0548
0549 for l=1:length(attr)
0550 if isequal(attr{l}.key,'name')
0551 xs_subelem(k).key=attr{l}.val;
0552 elseif isequal(attr{l}.key, 'minOccurs')
0553 xs_subelem(k).minOccurs=attr{l}.val;
0554 elseif isequal(attr{l}.key, 'maxOccurs')
0555 xs_subelem(k).maxOccurs=attr{l}.val;
0556 end
0557 end
0558 end
0559 node4=children(xs,node3(k));
0560 for l=1:length(node4)
0561 res=get(xs,node4(l),'name');
0562 if isequal(res,'xs:complexType')
0563 node5=children(xs,node4(l));
0564 for m=1:length(node5)
0565 res2=get(xs,node5(m),'name');
0566 if isequal(res2,'xs:sequence')
0567 xs_subelem(k).testsub=1;
0568 end
0569 end
0570 end
0571 end
0572 end
0573
0574 end
0575 end
0576 end
0577 end
0578 end
0579
0580 if length(xs_element.type)>=3 & (xs_element.type([1:3])~='xs:')
0581 node_type=find(xs,'/xs:schema/xs:simpleType')
0582 for i=1:length(node_type)
0583 content=get(xs,node_type(i));
0584 nodeattr=content.attributes;
0585 if ~isempty(nodeattr) & isequal(nodeattr{1}.key,'name') & isequal(nodeattr{1}.val,xs_element.type)
0586 node1=children(xs,node_type(i));
0587 node2=find(xs,node1,'name','xs:restriction');
0588
0589 node3=children(xs,node2);
0590 node4=find(xs,node3,'name','xs:enumeration');
0591 for ienum=1:length(node4)
0592 struct2=get(xs,node4(ienum));
0593 enumval=struct2.attributes;
0594 xs_element.enum{ienum}=enumval{1}.val;
0595 end
0596 end
0597 end
0598 end
0599
0600
0601
0602
0603
0604
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615
0616
0617
0618
0619
0620
0621
0622
0623
0624
0625
0626
0627
0628
0629 function [element,subelem]=get_xml(t,path,xs_element,node,xs_subelem)
0630 element.attr_key='';
0631 element.attr_val='';
0632 element.val='';
0633
0634
0635 subelem=[];
0636 attrup=[];
0637
0638
0639
0640 if node >= 1
0641 elem_struct=get(t,node);
0642 if ~xs_element.subtest
0643 elem_contents=get(t,elem_struct.contents);
0644 if isempty(elem_contents)
0645 element.val=[];
0646 else
0647 element.val=elem_contents.value
0648 end
0649 end
0650 if isfield(elem_struct,'attributes')
0651 elem_attr=elem_struct.attributes;
0652 for iattr=1:length(elem_attr)
0653 element.attr_key{iattr}=elem_attr{iattr}.key ;
0654 element.attr_val{iattr}=elem_attr{iattr}.val;
0655
0656 breakdetect=find(elem_attr{iattr}.key=='/'| elem_attr{iattr}.key==':'| elem_attr{iattr}.key=='.');
0657 if isempty(breakdetect)
0658
0659 eval(['attrup.' elem_attr{iattr}.key '=''' elem_attr{iattr}.val ''';'])
0660 end
0661 end
0662 end
0663 end
0664
0665 up=1;
0666 if node>0
0667 nodeup=node;
0668 while up==1;
0669 nodeup=get(t,nodeup,'parent');
0670 if isempty(nodeup)
0671 up=0;
0672 else
0673 nodeup_content=get(t,nodeup);
0674 attrib=nodeup_content.attributes;
0675 for iattr=1:length(attrib)
0676 key=attrib{iattr}.key;
0677 breakdetect=find(key=='/'| key==':'| key=='.');
0678 if ~isfield(attrup,key) & isempty(breakdetect)
0679 eval(['attrup.' key '=''' attrib{iattr}.val ''';'])
0680 end
0681 end
0682 end
0683 end
0684 element.attrup=attrup;
0685 end
0686
0687 if xs_element.subtest
0688 iline=0;
0689 for k=1:length(xs_subelem)
0690
0691
0692 tag=find(t,['/' path '/' xs_element.key '/' xs_subelem(k).key]);
0693 struct_element=get(t,tag);
0694 if isempty(struct_element)
0695 iline=iline+1;
0696 subelem(iline).uid=0;
0697 subelem(iline).xsindex=k;
0698 subelem(iline).index=0;
0699
0700 if isequal(xs_subelem(k).minOccurs,'0')
0701 subelem(iline).val='[]';
0702 else
0703 subelem(iline).val='[MISSING]';
0704 end
0705
0706 elseif isequal(length(struct_element),1)
0707 contents=get(t,struct_element.contents);
0708 iline=iline+1;
0709 subelem(iline).uid=tag;
0710 subelem(iline).xsindex=k;
0711 subelem(iline).index=1;
0712
0713 if isfield(contents,'value') & ~isempty(contents.value)
0714 subelem(iline).val=contents.value;
0715 elseif xs_subelem(k).testsub
0716 subelem(iline).val='';
0717 elseif isequal(xs_subelem(k).minOccurs,0)
0718 subelem(iline).val='[]';
0719 else
0720 subelem(iline).val='[MISSING]';
0721 end
0722
0723 if isfield(struct_element,'attributes')
0724 element_attr=struct_element.attributes;
0725 attr_display=[];
0726 for iattr=1:length(element_attr)
0727
0728 subelem(iline).val=[subelem(iline).val attr_display ' , ' element_attr{iattr}.key ' = ' element_attr{iattr}.val];
0729
0730 end
0731 end
0732 else
0733 for subindex=1:length(struct_element)
0734 contents=get(t,struct_element{subindex}.contents);
0735 iline=iline+1;
0736 subelem(iline).index=subindex;
0737 subelem(iline).xsindex=k;
0738
0739 if isfield(contents,'value')& ~isempty(contents.value)
0740 subelem(iline).val=contents.value;
0741 elseif xs_subelem(k).testsub
0742 subelem(iline).val='';
0743 else
0744 subelem(iline).val='[]';
0745 end
0746
0747 if isfield(struct_element{subindex},'attributes')
0748 element_attr=struct_element{subindex}.attributes;
0749 attr_display=[];
0750 for iattr=1:length(element_attr)
0751
0752 subelem(iline).val=[subelem(iline).val attr_display ' , ' element_attr{iattr}.key ' = ' element_attr{iattr}.val];
0753
0754 end
0755 end
0756 end
0757 end
0758 end
0759 end
0760
0761
0762
0763 function update_list(handles,path,xs_element,element,node,xs_subelem,subelem)
0764
0765 if xs_element.subtest
0766 set(handles.export_list,'Value',1)
0767 set(handles.export_list,'String','')
0768 set(handles.CurrentElement,'String',[path '/' xs_element.key])
0769
0770
0771
0772
0773
0774
0775
0776
0777
0778
0779
0780 set(handles.CurrentAnnotation,'String',xs_element.annot)
0781 attr_col=[];
0782 testedit=0;
0783 for iattr=1:length(element.attr_key)
0784
0785
0786
0787 attr_col=strvcat(attr_col,[element.attr_key{iattr} ' = ' element.attr_val{iattr}]);
0788 end
0789 set(handles.CurrentAttributes,'String',attr_col)
0790 pref_col='';
0791 key_col='';
0792 equal_sign='';
0793 val_col='';
0794 for iline=1:length(subelem)
0795 xsindex=subelem(iline).xsindex;
0796 index(iline)=subelem(iline).index;
0797 subuid=subelem(iline).uid;
0798 if isempty(subuid)
0799 list.uid(iline)=0;
0800 else
0801 list.uid(iline)=subuid;
0802 end
0803 node(iline)=xs_subelem(xsindex).node;
0804
0805 ikey=xs_subelem(xsindex).key;
0806 if xs_subelem(xsindex).testsub
0807 ival=[' + ' subelem(iline).val];
0808 else
0809 ival=[' = ' subelem(iline).val];
0810 end
0811 key_col=strvcat(key_col,ikey);
0812 val_col=strvcat(val_col,ival);
0813 end
0814 list_element=[key_col val_col];
0815 set(handles.list_element,'String',list_element)
0816 set(handles.list_element,'Value',1)
0817 list.xs_uid=node;
0818 list.index=index;
0819 set(handles.list_element,'UserData',list)
0820 set(handles.element_attrib,'Visible','off')
0821 set(handles.element_key,'Visible','off')
0822 set(handles.element_value,'Visible','off')
0823 else
0824
0825 export_list=get(handles.export_list,'String');
0826 testadd=1;
0827 for ilist=1:length(export_list)
0828 if isequal(xs_element.key,export_list{ilist})
0829 testadd=0;
0830 break
0831 end
0832 end
0833 if testadd
0834 export_list=[export_list;{xs_element.key}];
0835 ilist=length(export_list);
0836 end
0837 set(handles.export_list,'String',export_list)
0838 if iscell(element.val)
0839 element_val=element.val{1};
0840 else
0841 element_val=element.val;
0842 end
0843 set(handles.element_value,'String',element_val)
0844 export_val=get(handles.export_list,'UserData');
0845 export_val{ilist}=element_val;
0846 set(handles.export_list,'UserData',export_val);
0847 set(handles.element_annot,'String',xs_element.annot)
0848 set(handles.element_type,'String',['type: ' xs_element.type])
0849 attr_col=[];
0850 testedit=0;
0851 for iattr=1:length(element.attr_key)
0852
0853
0854
0855 attr_col=strvcat(attr_col,[element.attr_key{iattr} ' = ' element.attr_val{iattr}]);
0856 end
0857 set(handles.element_attrib,'String',attr_col)
0858 set(handles.element_key,'String',xs_element.key)
0859
0860
0861 if isempty(xs_element.enum)
0862 set(handles.element_value,'Value',1)
0863 set(handles.element_value,'Style','edit')
0864 else
0865 list_enum=[];
0866 list_val=[];
0867 for ienum=1:length(xs_element.enum)
0868 list_enum{ienum,1}=xs_element.enum{ienum};
0869 if isequal(xs_element.enum{ienum},element_val)
0870 list_val=ienum;
0871 end
0872 end
0873 if isempty(list_val)
0874 list_enum{length(xs_element.enum)+1,1}=['[' element_val ']'];
0875 list_val=length(xs_element.enum)+1;
0876 end
0877 set(handles.element_value,'Style','popupmenu')
0878 set(handles.element_value,'String',list_enum)
0879 set(handles.element_value,'Value',list_val)
0880 end
0881 if isempty(element.val)
0882 testedit=1;
0883 end
0884 set(handles.element_attrib,'Visible','On')
0885 set(handles.element_key,'Visible','On')
0886 set(handles.element_value,'Visible','On')
0887 end
0888 set(handles.element_value,'UserData',node)
0889 if ~testedit && isfield(element,'attrup') & isfield(element.attrup,'source')&& ~isequal(element.attrup.source,'manual')
0890 set(handles.element_value,'Enable','inactive')
0891 else
0892 set(handles.element_value,'Enable','on')
0893 end
0894
0895
0896
0897 function SAVE_Callback(hObject, eventdata, handles)
0898 global t
0899 DataIn=get(get(handles.SAVE,'parent'),'UserData');
0900 CurrentFile=get(handles.CurrentFile,'String');
0901 if isfield(DataIn,'Schema')
0902 if ~isempty(DataIn.Schema)
0903 attrxsd=attributes(t,'get',1);
0904 setest=0;
0905 for iattr=1:length(attrxsd)
0906 if isequal(attrxsd{iattr}.key,'xsi:noNamespaceSchemaLocation')
0907 t= attributes(t,'set',1,iattr,'xsi:noNamespaceSchemaLocation',DataIn.Schema);
0908 setest=1;
0909 end
0910 end
0911 if setest==0;
0912 t=attributes(t,'add',1,'xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance');
0913 t= attributes(t,'add',1,'xsi:noNamespaceSchemaLocation',DataIn.Schema);
0914 end
0915 end
0916 end
0917 copyfile(CurrentFile,[CurrentFile '.bak']);
0918 save(t,CurrentFile);
0919
0920
0921
0922
0923
0924
0925
0926
0927 function t=set_element(t,RootUid,node,key,value)
0928
0929 if isequal(node,0)
0930 [t,node]= add(t,RootUid,'element',key);
0931 end
0932 node_chardata=children(t,node);
0933 if isempty(node_chardata)
0934 t=add(t,node,'chardata',value);
0935 elseif isequal(length(node_chardata),1)&isequal(get(t,node_chardata,'type'),'chardata')
0936 t=set(t,node_chardata,'value',value);
0937 end
0938 attr=attributes(t,'get',node);
0939 if isempty(attr)
0940 t=attributes(t,'add',node,'source','manual');
0941 end
0942
0943
0944 function element_attr_val_Callback(hObject, eventdata, handles)
0945
0946
0947
0948
0949
0950
0951
0952
0953
0954 function ADD_Callback(hObject, eventdata, handles)
0955
0956
0957
0958
0959
0960
0961 function [Data,testsimple]=displ_xml(handles,t,root_uid,DataIn,heditxml)
0962 Data=DataIn;
0963 if ~isfield(Data,'CurrentUid')
0964 Data.CurrentUid=[];
0965 end
0966 CurrentFile=get(handles.CurrentFile,'String');
0967
0968
0969 root_element=get(t,root_uid);
0970 uidparent=root_uid;
0971 if isfield(root_element,'name')
0972 CurrentElement=root_element.name;
0973 while ~isequal(uidparent,1)
0974 uidparent=parent(t,uidparent);
0975 dirdat=get(t,uidparent);
0976 if isfield(dirdat,'name')
0977 CurrentElement=[dirdat.name '/' CurrentElement];
0978 end
0979 end
0980 set(handles.CurrentElement,'String',CurrentElement)
0981 end
0982 list_uid=children(t,root_uid);
0983
0984 testsimple=0;
0985 filedat=[];
0986 if ~isempty(list_uid)
0987 filedat=get(t,list_uid(1))
0988 if isfield(filedat,'type') & isequal(filedat.type,'chardata') &isfield(filedat,'value')
0989 testsimple=1;
0990 end
0991 end
0992
0993
0994 nbattrib= attributes(t,'length',root_uid);
0995 testopen=0;
0996 attr_col=[];
0997 for iattr=1:nbattrib
0998 attr= attributes(t,'get',root_uid,iattr);
0999 if isequal(attr.key,'source')
1000 if isequal(attr.val,'file')
1001 if isfield(filedat,'type') & isequal(filedat.type,'chardata') &isfield(filedat,'value')
1002 cur_file=filedat.value;
1003 uidparent=root_uid;
1004 while ~isequal(uidparent,1)
1005 uidparent=parent(t,uidparent);
1006 dirdat=get(t,uidparent);
1007 if isfield(dirdat,'type') & isequal(dirdat.type,'element') & isfield(dirdat,'name')
1008 nbattrib_up= attributes(t,'length',uidparent);
1009 for iattr_up=1:nbattrib_up
1010 attr= attributes(t,'get',uidparent,iattr_up);
1011
1012 if isequal(attr.key,'DirName')
1013 cur_file=fullfile(attr.val,cur_file);
1014 end
1015 end
1016 end
1017 end
1018 RootPath=fileparts(CurrentFile);
1019 cur_file=fullfile(RootPath,cur_file)
1020 set(handles.CurrentAttributes,'UserData',cur_file)
1021 [path,fil,ext]=fileparts(cur_file);
1022 if ~exist(cur_file,'file')
1023 warndlg_uvmat(['non-existent link file' cur_file],'ERROR')
1024 return
1025 elseif isequal(ext,'.xml')
1026 if ~isfield(Data,'UpFile')
1027 Data.UpFile={CurrentFile};
1028 else
1029 Data.UpFile=[{CurrentFile};Data.UpFile];
1030 end
1031 set(heditxml,'UserData',Data)
1032 set(handles.CurrentFile,'String',cur_file)
1033 CurrentFile_Callback(handles.CurrentFile, [], handles)
1034 else
1035 if isequal(get(heditxml,'Tag'),'browser');
1036 set(heditxml,'Tag','idle')
1037 else
1038 uvmat({cur_file});
1039 end
1040 return
1041 end
1042 end
1043
1044
1045 end
1046 end
1047 attr_col=strvcat(attr_col,[attr.key ' = ' attr.val]);
1048 end
1049 set(handles.CurrentAttributes,'String',attr_col)
1050
1051
1052 if ~testsimple
1053 list_element=[];
1054
1055 for iline=1:length(list_uid)
1056 element=get(t,list_uid(iline));
1057 if isfield(element,'type')&isequal(element.type,'element')
1058 list_element{iline,2}=element.name;
1059 child_uid=children(t,list_uid(iline));
1060 subelem=get(t,child_uid);
1061 if isfield(subelem,'type')& isfield(subelem,'value') & isequal(subelem.type,'chardata')
1062 data_read=subelem.value;
1063 list_element{iline,3}=['= ' data_read];
1064 end
1065 if iscell(subelem)|(isfield(subelem,'type')&isequal(subelem.type,'element'))
1066 list_element{iline,1}='+ ';
1067 else
1068 list_element{iline,1}=' ';
1069 end
1070 nbattr=attributes(t,'length',list_uid(iline));
1071 if nbattr==1
1072 attr=attributes(t,'get',list_uid(iline));
1073 list_element{iline,4}=[attr.key '='];
1074 list_element{iline,5}=attr.val;
1075 elseif nbattr>1
1076 for iattr=1:nbattr
1077 attr=attributes(t,'get',list_uid(iline),iattr);
1078 list_element{iline,2+2*iattr}=[attr.key '='];
1079 list_element{iline,3+2*iattr}=attr.val;
1080 end
1081 end
1082 end
1083 end
1084 set(handles.list_element,'Value',1)
1085 set(handles.list_element,'String',cell2tab(list_element,' ') )
1086 list.uid=list_uid;
1087 set(handles.list_element,'UserData',list)
1088 end
1089
1090
1091
1092 function update_ref_list(hh,xs_element,element,node,xs_subelem,subelem)
1093
1094 pref_col='';
1095 key_col='';
1096 equal_sign='';
1097 val_col='';
1098 for iline=1:length(subelem)
1099 xsindex=subelem(iline).xsindex;
1100 indexcur=subelem(iline).index;
1101 subuid=subelem(iline).uid;
1102 if isempty(subuid)
1103 RefDataIn.uid(iline)=0;
1104 else
1105 RefDataIn.uid(iline)=subuid;
1106 end
1107 index(iline)=indexcur;
1108 node(iline)=xs_subelem(xsindex).node;
1109
1110 ikey=xs_subelem(xsindex).key;
1111 if xs_subelem(xsindex).testsub
1112 ival=[' + ' subelem(iline).val];
1113 else
1114 ival=[' = ' subelem(iline).val];
1115 end
1116 key_col=strvcat(key_col,ikey);
1117 val_col=strvcat(val_col,ival);
1118 end
1119 RefDataIn.xs_uid=node;
1120 list_element=[key_col val_col];
1121 siztext=size(list_element);
1122 set(hh,'Value',[1:siztext(1)])
1123 set(hh,'String',list_element)
1124 set(hh,'UserData',RefDataIn)
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197 function replicate_Callback(hObject, eventdata, handles)
1198 global xs t
1199
1200 export_list=get(handles.export_list,'String');
1201 export_val=get(handles.export_list,'UserData');
1202 heditxml=get(handles.replicate,'parent');
1203 Data=get(heditxml,'UserData')
1204
1205 hdataview=findobj(allchild(0),'Name','dataview')
1206 if isempty(hdataview)
1207 hdataview=dataview;
1208 return
1209 end
1210 hhdataview=guidata(hdataview);
1211 CurrentPath=get(hhdataview.CurrentFile,'String');
1212 ListExperiments=get(hhdataview.ListExperiments,'String');
1213 Value=get(hhdataview.ListExperiments,'Value');
1214 if ~isequal(Value,1)
1215 ListExperiments=ListExperiments(Value);
1216 end
1217 ListDevices=get(hhdataview.ListDevices,'String');
1218 Value=get(hhdataview.ListDevices,'Value');
1219 if ~isequal(Value,1)
1220 ListDevices=ListDevices(Value);
1221 end
1222 ListRecords=get(hhdataview.ListRecords,'String');
1223 Value=get(hhdataview.ListRecords,'Value');
1224 if ~isequal(Value,1)
1225 ListRecords=ListRecords(Value);
1226 end
1227
1228 [ListDevices,ListRecords,ListXml,List]=ListDir(CurrentPath,ListExperiments,ListDevices,ListRecords);
1229 ListXml=get(hhdataview.ListXml,'String');
1230 Value=get(hhdataview.ListXml,'Value');
1231 if isequal(Value,1)
1232 warndlg_uvmat('you need to select the xml files to edit','ERROR')
1233 return
1234 end
1235 ListXml=ListXml(Value);
1236 for iexp=1:length(List.Experiment)
1237 ExpName=List.Experiment{iexp}.name;
1238 if isfield(List.Experiment{iexp},'Device')
1239 for idevice=1:length(List.Experiment{iexp}.Device)
1240 DeviceName=List.Experiment{iexp}.Device{idevice}.name;
1241 if isfield(List.Experiment{iexp}.Device{idevice},'xmlfile')
1242 for ixml=1:length(List.Experiment{iexp}.Device{idevice}.xmlfile)
1243 FileName=List.Experiment{iexp}.Device{idevice}.xmlfile{ixml};
1244 for ilistxml=1:length(ListXml)
1245 if isequal(FileName,ListXml{ilistxml})
1246 xmlfullname=fullfile(CurrentPath,ExpName,DeviceName,FileName);
1247 t_export=xmltree(xmlfullname);
1248 rootelement=get(t_export,1,'name');
1249 uidlist=Data.CurrentUid;
1250 if isequal(rootelement,get(t,1,'name'))
1251 backupfile=xmlfullname;
1252 testexist=2;
1253 while testexist==2
1254 backupfile=[backupfile '~'];
1255 testexist=exist(backupfile,'file');
1256 end
1257 [success,message]=copyfile(xmlfullname,backupfile);
1258 if ~isequal(success,1)
1259 warndlg_uvmat(['Error in the backup of ' xmlfullname],'ERROR')
1260 return
1261 end
1262 findstr=['/' rootelement];
1263 uid_export(1)=1;
1264
1265 for index=2:length(uidlist)
1266 name_t=get(t,uidlist(index),'name')
1267 findstr=[findstr '/' name_t]
1268 uid=find(t_export,findstr)
1269 if isempty(uid)
1270 [t_export,uid_export(index)]=add(t_export,uid_export(index-1),'element',name_t);
1271 else
1272 uid_export(index)=uid;
1273 end
1274 end
1275
1276 end
1277 break
1278 end
1279 end
1280
1281
1282
1283
1284 end
1285 elseif isfield(List.Experiment{iexp}.Device{idevice},'Record')
1286 for irecord=1:length(List.Experiment{iexp}.Device{idevice}.Record)
1287 RecordName=List.Experiment{iexp}.Device{idevice}.Record{irecord}.name;
1288 if isfield(List.Experiment{iexp}.Device{idevice}.Record{irecord},'xmlfile')
1289 for ixml=1:length(List.Experiment{iexp}.Device{idevice}.Record{irecord}.xmlfile)
1290 FileName=List.Experiment{iexp}.Device{idevice}.Record{irecord}.xmlfile{ixml};
1291 for ilistxml=1:length(ListXml)
1292 if isequal(FileName,ListXml{ilistxml})
1293 xmlfullname=fullfile(CurrentPath,ExpName,DeviceName,RecordName,FileName)
1294 break
1295 end
1296 end
1297
1298
1299
1300
1301 end
1302 end
1303 end
1304 end
1305 end
1306 end
1307 end
1308 return
1309
1310
1311
1312
1313 heditxml=get(hObject,'parent');
1314 DataIn=get(heditxml,'UserData');
1315 if ~isfield(DataIn,'h_ref')
1316 DataIn.h_ref=[];
1317 end
1318 if ~ishandle(DataIn.h_ref)
1319 errordlg('no source file opened for import')
1320 return
1321 end
1322
1323 LengthElement=length(DataIn.CurrentUid);
1324 FilledUid=find(DataIn.CurrentUid~=0);
1325 LengthFilled=FilledUid(end);
1326 for irank=LengthFilled+1:LengthElement
1327 attrib=attributes(xs,'get',DataIn.xs_CurrentUid(irank),1);
1328 [t,DataIn.CurrentUid(irank)]=add(t,DataIn.CurrentUid(irank-1),'element',attrib.val);
1329 end
1330
1331
1332 RefDataIn=get(DataIn.h_ref,'UserData');
1333 list=get(handles.list_element,'UserData');
1334 for ilist=get(DataIn.h_ref,'Value')
1335 node_content=get(xs,RefDataIn.xs_uid(ilist));
1336 if ~isempty(node_content) & isfield(node_content,'attributes')
1337 attrib=node_content.attributes;
1338 for iattr=1:length(attrib)
1339 struct=attrib{iattr};
1340 if isequal(struct.key,'name')
1341 key=struct.val;
1342 end
1343 end
1344 end
1345 value='';
1346 if ~isequal(RefDataIn.uid(ilist),0)
1347 child_uid=children(t_ref,RefDataIn.uid(ilist));
1348 if isequal(length(child_uid),1)
1349 content=get(t_ref,child_uid);
1350 if isfield(content,'type') &isfield(content,'value')& isequal(content.type,'chardata')
1351 value=content.value;
1352 end
1353 end
1354 end
1355 t=set_element(t,DataIn.CurrentUid(end),list.uid(ilist),key,value);
1356 end
1357 set(heditxml,'UserData',DataIn)
1358
1359 [nodeup,path,xs_element,xs_subelem]=scan_schema(xs,DataIn.xs_CurrentUid(end));
1360 [element,subelem]=get_xml(t,path,xs_element,DataIn.CurrentUid(end),xs_subelem);
1361 update_list(handles,path,xs_element,element,DataIn.CurrentUid(end),xs_subelem,subelem);
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521 function HELP_Callback(hObject, eventdata, handles)
1522 path_to_uvmat=which ('uvmat')
1523 pathelp=fileparts(path_to_uvmat);
1524 helpfile=fullfile(pathelp,'UVMAT_DOC','uvmat_doc.html');
1525 if isempty(dir(helpfile)), errordlg('Please put the help file uvmat_doc.html in the directory UVMAT/UVMAT_DOC')
1526 else
1527 web([helpfile '#editxml'])
1528 end
1529
1530
1531
1532 function Export_Callback(hObject, eventdata, handles)
1533 val=get(handles.Export,'Value');
1534 if val
1535 set(handles.Export,'BackgroundColor',[0 1 0])
1536 set(handles.export_list,'Visible','on')
1537 set(handles.replicate,'Visible','on')
1538 h_dataview=findobj(allchild(0),'name',dataview');
1539 if isempty(h_dataview)
1540
1541 dataview;
1542 end
1543 else
1544 set(handles.Export,'BackgroundColor',[0.7 0.7 0.7])
1545 set(handles.export_list,'Visible','off')
1546 set(handles.replicate,'Visible','off')
1547 end
1548
1549
1550
1551 function pushbutton9_Callback(hObject, eventdata, handles)
1552
1553
1554
1555
1556