天天看點

matlab讀xml資料庫,matlab 讀取 xml 的一個詳細例子

在網上找了一些例子,但是都不夠細緻,甚至錯誤連連。這篇文章介紹了如何通過matlab讀取xml檔案,已經順在matlab 2009中運作。

這個程式中,最可能遇到的錯誤是你的xml檔案格式不正确,導緻無法讀取。比如說,如果xml檔案第一行首位有個空格,

_<?xml version="1.0" ?>會出現如下錯誤:

The processing instruction target matching "[xX][mM][lL]" is not allowed.

是以xml 檔案弄好後,最好用IE浏覽器打開,檢查xml格式是否正确。

這個例子中有兩種節點,一種是沒有子節點的,如;另外一種是有子節點的,如。具體文法參考注釋。

以下是matlab檔案:

clear;

xmlDoc = xmlread('test.xml'); % 讀取檔案 test.xml

%% Extract ID

IDArray = xmlDoc.getElementsByTagName('ID'); % 将所有ID節點放入數組IDArray

for i = 0 : IDArray.getLength-1 % 此例子中, IDArray.getLength 等于 2

nodeContent = char(IDArray.item(i).getFirstChild.getData) % 提取目前節點的内容

end

%% extract the FDs

FDsArray = xmlDoc.getElementsByTagName('FDs'); % 将所有FDs節點放入數組FDsArray

for i = 0 : FDsArray.getLength-1

thisItem = FDsArray.item(i); %

FDsAttributes = char(thisItem.getAttributes.item(0).getValue) % 提取FDs節點的屬性,如果沒有屬性或不需要提取,可以注釋掉。這裡,FDsAttributes = opencv-matrix

childNode = thisItem.getFirstChild ;

while ~isempty(childNode) % 周遊FDs的所有子節點,也就是周遊 ("rows, cols, data") 節點

if childNode.getNodeType == childNode.ELEMENT_NODE ; % 檢查目前節點沒有子節點, childNode.ELEMENT_NODE 定義為沒有子節點。

childNodeNm = char(childNode.getTagName) % 目前節點的名字

childNodeData = char(childNode.getFirstChild.getData) % 目前節點的内容

end % End IF

childNode = childNode.getNextSibling; % 切換到下一個節點

end % End WHILE

end

test.xml 檔案:

1

100

10

0.16975 0.14135 0.048581

2

100

10

0.095217 0.17111 0.11691

最後附上matlab中,關于節點類型的幾個宏的定義。

1 ELEMENT_NODE

2 ATTRIBUTE_NODE

3 TEXT_NODE

4 CDATA_SECTION_NODE

5 ENTITY_REFERENCE_NODE

6 ENTITY_NODE

7 PROCESSING_INSTRUCTION_NODE

8 COMMENT_NODE

9 DOCUMENT_NODE

10 DOCUMENT_TYPE_NODE

11 DOCUMENT_FRAGMENT_NODE

12 NOTATION_NODE