我对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堆空间
答案 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/