项目需要在matlab中读取多个点数据文件,为了更好管理多个文件,定义了一个XML文件。格式如下:
<?xml version="1.0" encoding="utf-8"?>
<scan>
<name>分三次扫描</name>
<robot>机器人</robot>
<workpiece>叶片</workpiece>
<data angle="30" md5="a41d85fb08a42c7c8f512f7a1139a112" src="html\test.html"/>
<data angle="40" md5="58dcc9450ddafcee5be2f9fef7b070e3" src="html\xml_tutorial_script.html"/>
<data angle="60" md5="016946d9cc65deb9dcdf0fca3520e57f" src="html\xml_tutorial_script_01.png"/>
</scan>
每个data标签就是一个扫描的点云文件。md5属性用于验证文件是否被篡改。
Matlab自带的XML函数比较麻烦,使用了一个第三方xml_read/xml_write。地址(https://ww2.mathworks.cn/matlabcentral/mlc-downloads/downloads/submissions/12907/versions/14/download/zip/xml_io_tools_2010_11_05.zip)
scaninfo = xml_read('\scan.xml');
disp(['Scan Name-:',scaninfo.name]);
//遍历data元素
datas=size(scaninfo.data);
for n=1:datas
sprintf('Current is %d ',n)
//判断结构体是否存在angle字段
if isfield(scaninfo.data(n).ATTRIBUTE,'angle')
disp(scaninfo.data(n).ATTRIBUTE.angle);
end
if isfield(scaninfo.data(n).ATTRIBUTE,'md5')
disp(scaninfo.data(n).ATTRIBUTE.md5);
end
if isfield(scaninfo.data(n).ATTRIBUTE,'src')
fileName=(scaninfo.data(n).ATTRIBUTE.src);
DataHash(fileName,'MD5','file')
//修改属性值
scaninfo.data(n).ATTRIBUTE.md5 = DataHash(fileName,'MD5','file')
end
end
//新增节点
newNode=struct;
newNode.CONTENT='That''s all!';
newNode.ATTRIBUTE.angle='2:00';
newNode.ATTRIBUTE.src='test.jpg;
scaninfo.data(end+1)=newNode;
wPref.StructItem = false
xml_write('regular_output.xml',scaninfo,'scan',wPref)