分享

matlab 读取 xml 的一个详细例子

 maoj66 2014-05-14

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


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

  1. _<?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文件:

  1. clear;  
  2. xmlDoc = xmlread('test.xml');   % 读取文件  test.xml  
  3.   
  4. %% Extract ID  
  5. IDArray = xmlDoc.getElementsByTagName('ID');    % 将所有ID节点放入数组IDArray  
  6. for i = 0 : IDArray.getLength-1    % 此例子中, IDArray.getLength 等于 2  
  7.     nodeContent = char(IDArray.item(i).getFirstChild.getData)    % 提取当前节点的内容  
  8. end  
  9.   
  10. %% extract the FDs  
  11. FDsArray = xmlDoc.getElementsByTagName('FDs');  %   将所有FDs节点放入数组FDsArray  
  12.   
  13.  for i = 0 : FDsArray.getLength-1     
  14.     thisItem = FDsArray.item(i);  %      
  15.     FDsAttributes = char(thisItem.getAttributes.item(0).getValue)   % 提取FDs节点的属性,如果没有属性或不需要提取,可以注释掉。这里,FDsAttributes =  opencv-matrix  
  16.     childNode = thisItem.getFirstChild ;  
  17.       
  18.   while ~isempty(childNode)  % 遍历FDs的所有子节点,也就是遍历 ("rows, cols, data") 节点  
  19.   
  20.       if childNode.getNodeType == childNode.ELEMENT_NODE ;    % 检查当前节点没有子节点,  childNode.ELEMENT_NODE 定义为没有子节点。  
  21.         childNodeNm = char(childNode.getTagName)        % 当前节点的名字  
  22.         childNodeData = char(childNode.getFirstChild.getData)    % 当前节点的内容  
  23.       end  % End IF     
  24.         
  25.      childNode = childNode.getNextSibling;     % 切换到下一个节点  
  26.   end  % End WHILE     
  27.  end  



test.xml 文件:

  1. <?xml version="1.0" ?>   
  2. <opencv_storage>  
  3.    <model1>  
  4.       <ID>1</ID>  
  5.        <FDs type_id="opencv-matrix">  
  6.          <rows>100</rows>  
  7.          <cols>10</cols>  
  8.          <data>0.16975     0.14135    0.048581  </data>  
  9.       </FDs>  
  10.       </model1>  
  11.   
  12.    <model2>  
  13.       <ID>2</ID>  
  14.       <FDs type_id="opencv-matrix">  
  15.          <rows>100</rows>  
  16.          <cols>10</cols>  
  17.          <data>0.095217     0.17111     0.11691   </data>  
  18.       </FDs>  
  19.          </model2>  
  20.   </opencv_storage>  


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

  1. 1   ELEMENT_NODE  
  2. 2   ATTRIBUTE_NODE  
  3. 3   TEXT_NODE  
  4. 4   CDATA_SECTION_NODE  
  5. 5   ENTITY_REFERENCE_NODE  
  6. 6   ENTITY_NODE  
  7. 7   PROCESSING_INSTRUCTION_NODE  
  8. 8   COMMENT_NODE  
  9. 9   DOCUMENT_NODE  
  10. 10  DOCUMENT_TYPE_NODE  
  11. 11  DOCUMENT_FRAGMENT_NODE  
  12. 12  NOTATION_NODE  




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多