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