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

 

 
 





转载于:https://www.cnblogs.com/zhuangwy-cv/p/3729855.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值