Matlab:读取具有多个子项的XML

  • 本文关键字:XML 读取 Matlab xml matlab
  • 更新时间 :
  • 英文 :


这是我的'C1.xml'文件:

<!DOCTYPE GroundTruth>
<dataset name="camera1">
 <frame number="00000000"/>
 <frame number="00000001"/>
 <frame number="00000002"/>
 <frame number="00000003"/>
 <frame number="00000004"/>
.
.
.
 <frame number="00000233">
  <person id="0001">
   <leftEye x="626" y="210"/>
   <rightEye x="643" y="214"/>
  </person>
 </frame>
 <frame number="00000234">
  <person id="0003">
   <leftEye x="619" y="211"/>
   <rightEye x="636" y="215"/>
  </person>
 </frame>
 <frame number="00000235">
  <person id="0025">
   <leftEye x="613" y="213"/>
   <rightEye x="630" y="216"/>
  </person>
 </frame>
 <frame number="00004403"/>
 <frame number="00004404"/>
 <frame number="00004405"/>
 <frame number="00004406"/>
 <frame number="00004407"/>
 <frame number="00004408"/>
 <frame number="00004409"/>
</dataset>

我的不完整代码:

xDoc = xmlread('C1.xml');
allListitems = xDoc.getElementsByTagName('frame');
frameL = allListitems.getLength;
for k = 0:frameL-1
    thisElement = allListitems.item(k);
    thisList = thisElement.getElementsByTagName('person');
    if (thisList.getLength~=0)
        thisElement = thisList.item(0);
        % problem is here where I also don't know what type of data findCbk 
        % have (char or ...??)
        findCbk = char(thisElement.getFirstChild.getData);
    end
end

我想获取带有相应人员 ID 的帧号以及左眼和右眼的数据。所以,如果我sprintf findCbk,它会给我一些我无法%d联想到的数字,而%s是空的。

所以这里有答案。我需要的是getAttribute.因此,如果有人遇到同样的问题,或者如果我错了,有人可以纠正我,我会写下代码。

xDoc = xmlread('C1.xml');
allListitems = xDoc.getElementsByTagName('frame');
frameL = allListitems.getLength;
for k = 0: frameL-1
    thisElement = allListitems.item(k);
    frameNum = (char(thisElement.getAttribute('number')))
%check the child inside element frame
thisList = thisElement.getElementsByTagName('person');
face = thisList.getLength;
if (face~=0)
    thisElement = thisList.item(0);
    personID = (char(thisElement.getAttribute('id')))
        eyeL = thisElement.getElementsByTagName('leftEye');
                        thisElementl = eyeL.item(0);
                xL = (char(thisElementl.getAttribute('x')))
                yL = (char(thisElementl.getAttribute('y')))
        eyeR = thisElement.getElementsByTagName('rightEye');
                       thisElementr = eyeR.item(0);
                xR = (char(thisElementr.getAttribute('x')))
                yR = (char(thisElementr.getAttribute('y')))
    break 
end
end

它将返回:

frameNum =
00000000
frameNum =
00000001    
frameNum =
00000002
.
.
.
.       
frameNum =
00000230 
frameNum =
00000231
frameNum =
00000232
frameNum =
00000233
personID =
0003
xL =
626    
yL =
210
xR =
643
yR =
214