Matlab 7.0 中对xml的读写操作主要使用到 [toolbox\matlab\iofun] 工具包中的xmlread.m 和 xmlwrite.m 文件。使用XML Document Object Model的方法,实现对xml文件的操作。Matlab中的xml操作实际上采用了Java中的DOM的方法。
读XML: (MATLAB701安安装路径下)\toolbox\matlab\iofun 的 xmlread.m
XMLREAD [转换一个XML文档,返回一个Document Object Model节点。]
DOMNODE = XMLREAD(FILENAME) 读取一个文件名或XML的URL,并对文档转换返回一个Document Object Model节点。
写XML: (MATLAB701安安装路径下)\toolbox\matlab\iofun 的 xmlwrite.m
XMLWRITE [序列化一个 XML Document Object Model 节点成为一个 输出文件。]
XMLWRITE(FILENAME,DOMNODE) 序列化 DOMNODE 成为 FILENAME 所指定的文件。
S = XMLWRITE(DOMNODE) 以字符串的方式返回这个XML节点树。
在Matlab m文件编辑器中编写需要用到XML文件的m文件时,由于Matlab环境路径变量的设置,测试运行时不需要把xmlread.m和xmlwrite.m拷贝到同一路径。但是需要作成COM组件时,需要把这两个文件和用户作成的m文件一起添加进COM作成工程。编译后的dll才能够实现对xml文件的读写操作。
对XML Document Object Model 更多的了解,可参照 W3C Document Object Model (DOM):http://www.w3.org/DOM/。
对JAVA中使用DOM的方法,可参考Sun Web site:http://www.java.sun.com/xml/docs/api。
程序示例:
M文件 (xmlwritetest1.m):
function xmlwritetest1(infilename,outfilename)
tic; % 开始计时
%-----------------IN XML--------------------------------------------%
try
xDoc = xmlread(infilename);
catch
error('Failed to read XML file %s.',infilename);
end
allSylListItems = xDoc.getElementsByTagName('syl');
intCount = 0;
for k = 0:allSylListItems.getLength-1
thisListItem = allSylListItems.item(k);
childNode = thisListItem.getFirstChild;
while ~isempty(childNode)
if childNode.getNodeType == childNode.ELEMENT_NODE
childText = char(childNode.getFirstChild.getData);
switch char(childNode.getTagName)
case 'rm';
intCount = intCount + 1;
rm(intCount) = str2double(char(childText));
case 'rp' ;
rp(intCount) = str2double(char(childText));
end
end
childNode = childNode.getNextSibling;
end
end
%-----------------Process--------------------------------------------%
% 转为列向量
rp = rp(:);
rm = rm(:);
%获取样本数
n=length(rp);
if length(rm) ~= n
ReturnCode = 1
ReturnMsg = 'Rp,Rm样本数据维数不一致';
else
ReturnCode = 0
ReturnMsg = '最终结果';
outBETA = beta(rp,rm);
end
Runtime = toc; %执行时间
%-----------------OUT XML--------------------------------------------%
% 创建 XML document.
docNode = com.mathworks.xml.XMLUtils.createDocument('outBETA');
docRootNode = docNode.getDocumentElement;
%添加结果数据
if ReturnCode == 0
for i=1:length(outBETA)
thisElement = docNode.createElement('Beta');
thisElement.appendChild...
(docNode.createTextNode(sprintf('%f',outBETA(i))));
docRootNode.appendChild(thisElement);
end
end
%添加返回值
%结果代码
CodeElement = docNode.createElement('ReturnInfo');
CodeElement.appendChild...
(docNode.createTextNode(sprintf('%d',ReturnCode)));
docRootNode.appendChild(CodeElement);
%结果信息
MsgElement = docNode.createElement('ReturnMsg');
MsgElement.appendChild...
(docNode.createTextNode(sprintf('%s',ReturnMsg)));
docRootNode.appendChild(MsgElement);转自:http://benq.blogbus.com/logs/1475223.html