在Matlab中查找XML元素和读取属性

时间:2014-08-20 15:04:59

标签: xml matlab xml-parsing

我对XML很陌生,对Matlab中的XML很新,但我试图从(非常大的)XML文件中读取属性。

该文件如下所示:

<WorkGen>
 <experiment>
  <parameters>
  <exptid> abcd </exptid>
  <years> 400 </years>
  </parameters>
 </experiment>
 <experiment>
  <parameters>
  <exptid> wxyz </exptid>
  <years> 90 </years>
  </parameters>
 </experiment>
 ...
</WorkGen>

鉴于实验ID(exptid),我希望能够使用Matlab找到年份的值。有人知道一种直截了当的方式吗?


注意我尝试了XML2Struct,但在尝试读入XML时出现内存不足错误:

Java.lang.OutOfMemoryError:Java堆空间 使用org.apache.xerces.jaxp.DocumentBuilderImpl / parse时出错 无法检索异常消息 xmlread中的错误(第98行) parseResult = p.parse(fileName); xml2struct中的错误(第53行)         xDoc = xmlread(file);

线程中的异常&#34; TimerQueue&#34;线程中的异常&#34; AWT-EventQueue-0&#34; java.lang.OutOfMemoryError:Java堆空间 java.lang.OutOfMemoryError:Java堆空间

2 个答案:

答案 0 :(得分:2)

试试这个:

findExptID = ' wxyz ';
findYear = '';

xDoc = xmlread('myfile.xml');

allListitems = xDoc.getElementsByTagName('experiment');

for k = 0:allListitems.getLength-1
   thisListitem = allListitems.item(k);

   % Get the label element. In this file, each
   % listitem contains only one label.
   thisList = thisListitem.getElementsByTagName('exptid');
   thisElement = thisList.item(0);

   % Check whether this is the label you want.
   % The text is in the first child node.
   if strcmp(thisElement.getFirstChild.getData, findExptID)
       thisList = thisListitem.getElementsByTagName('years');
       thisElement = thisList.item(0);
       findYear = char(thisElement.getFirstChild.getData);
       break;
   end

end

disp(findYear);

答案 1 :(得分:0)

您的错误消息表明问题确实是由于Java发生的(xmlread内部,所以我不确定@ sclarke81的解决方案是否有效)。这是处理Matlab Java基础的经典错误。 Java内存不足(堆空间)。您可以尝试增加它并查看是否可以解决这种情况 - 来自The MathWorks的这篇博文详细介绍了如何检查堆大小以及如何根据首选项调整它:

http://blogs.mathworks.com/community/2010/04/26/controlling-the-java-heap-size/