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

 

 
 





posted on 2014-05-15 13:42  zhuangwy_CV  阅读(9960)  评论(0编辑  收藏  举报

导航