利用matlab对xml文件进行批量处理
生活随笔
收集整理的這篇文章主要介紹了
利用matlab对xml文件进行批量处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文為原創作品,未經本人同意,禁止轉載,禁止用于商業用途!本人對博客使用擁有最終解釋權
歡迎關注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/
本文主要是要利用matlab編寫一個M文件,這個M文件的主要功能:對一個文件夾下面的多個XML文件進行信息的提取,然后利用所要得到的信息進行計算,最后生成對應文件名的文本文件。
先上一下XML文件:
?
<?xml version="1.0" ?> <annotation><folder>che</folder><filename>a90180.jpg</filename><source><database>Unknown</database></source><size><width>641</width><height>512</height><depth>3</depth></size><segmented>0</segmented><object><name>1</name><pose>Unspecified</pose><truncated>0</truncated><difficult>0</difficult><bndbox><xmin>307</xmin><ymin>225</ymin><xmax>342</xmax><ymax>290</ymax></bndbox></object> </annotation>針對于這個XML文件,提取里面的xmin ,ymin,xmax,ymax四個節點的值,計算出長寬。并把,上面的坐標和長和寬寫到和xml文件名一致的文本文件中。
上代碼:
?
clc clear allmaindir = 'C:\Users\yezi\Desktop'; %%存放文件的上一級目錄,即該文件夾的上一級,文件位于C:\Users\yezi\Desktop\3下面 subdir = dir( maindir ); % 先確定子文件夾 for i = 1 : length( subdir ) if( isequal( subdir( i ).name, '.' ) ||isequal( subdir( i ).name, '..' ) || ~subdir( i ).isdir ) ; % 如果不是目錄跳過 continue; end subdirpath = fullfile( maindir, subdir( i ).name, '*.xml' ); images = dir( subdirpath ); % 在這個子文件夾下找后綴為jpg的文件 % 遍歷每張圖片 for j = 1 : length( images ) imagepath = fullfile( maindir, subdir( i ).name, images( j ).name ) % % % imgdata = imread( imagepath ); % 這里進行你的讀取操作 xmlDoc=xmlread(imagepath); %讀入xml文件% name = 'a80240'; str1 = '1 '%% extract the FDs FDsArray = xmlDoc.getElementsByTagName('bndbox'); % 將所有PerHuman節點放入數組FDsArray k=0; % for i = 1 : FDsArray.getLength thisItem = FDsArray.item(0); % %FDsAttributes = char(thisItem.getAttributes.item(0).getValue) % 提取FDs節點的屬性,如果沒有屬性或不需要提取,可以注釋掉。這里,FDsAttributes = opencv-matrixchildNode = thisItem.getFirstChild ;while ~isempty(childNode) % 遍歷PerHuman的所有子節點,也就是遍歷 標注程序保存下來的各個數據點 節點if childNode.getNodeType == childNode.ELEMENT_NODE ; % 檢查當前節點沒有子節點, childNode.ELEMENT_NODE 定義為沒有子節點。k=1+k;childNodeNm = char(childNode.getTagName) ; % 當前節點的名字childNodedata = char(childNode.getFirstChild.getData) % 當前節點的內容 % marks=choosenode(childNodeNm);m(k) = str2num(childNodedata);end % End IF childNode = childNode.getNextSibling; % 切換到下一個節點end % End WHILEx = m(3)-m(1);y = m(4)-m(2); % strrep 進行字符串替換,區分大小寫 % strrep(str1,str2,str3) % 它把str1中所有的str2字串用str3來替換newname = strrep(images( j ).name,'.xml','.txt')%%重命名fid=fopen(newname,'wt'); %在當前目錄下創建一個文件寫入數據 fprintf(fid,str1); fprintf(fid,'%d',m(1));fprintf(fid,' ');fprintf(fid,'%d',m(2));fprintf(fid,' '); fprintf(fid,'%d',x);fprintf(fid,' '); fprintf(fid,'%d',y); fclose(fid);end end
最后附上參考的文章鏈接
?文件批量處理
對xml進行操作
感謝作者分享!
總結
以上是生活随笔為你收集整理的利用matlab对xml文件进行批量处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【进阶篇】Vue Devtools——v
- 下一篇: web前端岗位经典面试题,面试前必读!