matlab讀取xml文件


xml文件是一種可擴展標識語言,可以用來存儲數據
由於實驗需求要用matlab讀取保存在xml文件的人體關節點數據
以下是'bodyannotation.xml'一個樣例的示例,共305個圖片標定,

以下是我參照網上他人的方法寫的xml讀取程序
clc;
clear;
xmlDoc = xmlread('bodyannotation.xml');   % 讀取文件  bodyannotation.xml

%% Extract ID
IDArray = xmlDoc.getElementsByTagName('ImagePath');    % 將所有ImagePath節點放入數組IDArray
for i = 1 : IDArray.getLength    % 此例子中, IDArray.getLength 等於 305
    kth(i).pathnm= char(IDArray.item(i-1).getFirstChild.getData)    % 提取當前節點的內容
end

%% extract the FDs
FDsArray = xmlDoc.getElementsByTagName('PerHuman');  %   將所有PerHuman節點放入數組FDsArray

 for i = 1 : FDsArray.getLength   
    thisItem = FDsArray.item(i-1);  %    
    %FDsAttributes = char(thisItem.getAttributes.item(0).getValue)   % 提取FDs節點的屬性,如果沒有屬性或不需要提取,可以注釋掉。這里,FDsAttributes =  opencv-matrix
    childNode = thisItem.getFirstChild ;
    
  while ~isempty(childNode)  % 遍歷PerHuman的所有子節點,也就是遍歷 標注程序保存下來的各個數據點 節點

      if  childNode.getNodeType == childNode.ELEMENT_NODE ;    % 檢查當前節點沒有子節點,  childNode.ELEMENT_NODE 定義為沒有子節點。
          childNodeNm = char(childNode.getTagName)        % 當前節點的名字
          childNodedata = char(childNode.getFirstChild.getData)    % 當前節點的內容
          marks=choosenode(childNodeNm);
          switch(marks)                                         
             case 1     
                 A.head=childNodedata;
             case 2     
                 A.neck=childNodedata;
             case 3  
                 A.leftshoulder=childNodedata;
             case 4
                 A.rightshoulder=childNodedata;
             case 5
                 A.leftartifice=childNodedata;
             case 6
                 A.rightartifice=childNodedata;
             case 7
                 A.lefthand=childNodedata;
             case 8
                 A.righthand=childNodedata;
             case 9
                 A.leftpelvis=childNodedata;
             case 10
                 A.rightpelvis=childNodedata;
             case 11
                 A.leftknee=childNodedata;
             case 12
                 A.rightknee=childNodedata;
             case 13
                 A.leftfoot=childNodedata;
             case 14
                 A.rightfoot=childNodedata;
              otherwise
             end
      end  % End IF   
      
     childNode = childNode.getNextSibling;     % 切換到下一個節點
  end  % End WHILE
     kth(i).head=A.head;                        %已有重復,可以直接在上一段中用kth(i)取代A,但暫時不做修改了。
     kth(i).neck=A.neck;
     kth(i).leftshoulder=A.leftshoulder;
     kth(i).rightshoulder=A.rightshoulder;
     kth(i).leftartifice=A.leftartifice;
     kth(i).rightartifice=A.rightartifice;
     kth(i).lefthand=A.lefthand;
     kth(i).righthand=A.righthand;
     kth(i).leftpelvis=A.leftpelvis;
     kth(i).rightpelvis=A.rightpelvis;
     kth(i).leftknee=A.leftknee;
     kth(i).rightknee=A.rightknee;
     kth(i).leftfoot=A.leftfoot;
     kth(i).rightfoot=A.rightfoot;
 end

 

 
 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM