您的位置:首页 > 编程语言 > MATLAB

matlab读取xml文件

2016-03-27 19:00 926 查看
在网上找了一些例子,但是都不够细致,甚至错误连连。这篇帖子介绍了如何通过matlab读取xml文件,已经顺在matlab 2009中运行。

这个程序中,最可能遇到的错误是你的xml文件格式不正确,导致无法读取。比如说,如果xml文件第一行首位有个空格,

[html] view
plain copy

_<?xml version="1.0" ?>

会出现如下错误:

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

所以xml 文件弄好后,最好用IE浏览器打开,检查xml格式是否正确。

这个例子中有两种节点,一种是没有子节点的,如<ID>;另外一种是有子节点的,如<FDs type_id="opencv-matrix">。具体语法参考注释。

以下是matlab文件:

[python] view
plain copy

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 文件:

[html] view
plain copy

<?xml version="1.0" ?>

<opencv_storage>

<model1>

<ID>1</ID>

<FDs type_id="opencv-matrix">

<rows>100</rows>

<cols>10</cols>

<data>0.16975 0.14135 0.048581 </data>

</FDs>

</model1>

<model2>

<ID>2</ID>

<FDs type_id="opencv-matrix">

<rows>100</rows>

<cols>10</cols>

<data>0.095217 0.17111 0.11691 </data>

</FDs>

</model2>

</opencv_storage>

最后附上matlab中,关于节点类型的几个宏的定义。

[plain] view
plain copy

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: