[转]Matlab 7.0 中XML文件读写测试

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) 读取一个文件名或XMLURL,并对文档转换返回一个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.mxmlwrite.m拷贝到同一路径。但是需要作成COM组件时,需要把这两个文件和用户作成的m文件一起添加进COM作成工程。编译后的dll才能够实现对xml文件的读写操作。

 

XML Document Object Model 更多的了解,可参照 W3C Document Object Model (DOM)http://www.w3.org/DOM/

JAVA中使用DOM的方法,可参考Sun Web sitehttp://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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值