[转]读写html文件的函数和读写xml文件的函数

来源:互联网 发布:淘宝客服介绍 编辑:程序博客网 时间:2024/06/05 21:10
在matlab中调用strcat()函数获得的是一个cell类型的 变量,而不是string类型。这是如果我们直接把这个cell类型的变量,传递到其他函数中作为string类型使用,就是出现问题,下面是一个例子:

names={'fyc','hy','ljg','lqf','lsl','ml','nhz','rj','syj','wl','wq','wyc','xch','xxj','yjf',

'zc','zdx','zjg','zl','zyf'};
len_names=length(names);
for i=1:len_names
url=strcat('D:\GaitDatasetA-silh\silhouettes\',names(i),'\00_1');
url=url{1};%将cell类型转换为 string类型
end

正如上面所示的一样,url调用strcat('D:\GaitDatasetA-silh\silhouettes\',names(i),' \00_1');得到的是一个cell类型的变量,此时需要对url做一些变换就可以了,使用url=url{1};就搞定了!

……………………………………………………………………

除了读取和存储各类文本、CSV和XLS文件(详见 Matlab中的数据导入和导出) 外,Matlab还提供了各类读写网络数据的函数,这里介绍读写html文件的函数和读写xml文件的函数。

Urlread: 访问本地或网络文件

函 数urlread的语法形式主要有三种:

s = urlread('url')       访问指定url并返回内容给字符串s
s = urlread('url','method','params')   向服务器传递额外参数,method可以是post或get
[s,status] = urlread(...)     返回错误代码

示例:下载网页内容并列出网页中所有图片

s=urlread('http://www.baidu.com/');
findstr(s,’gif’)
findstr 命令返回网页内容字符串s中包含gif字符的起始位置。

使用正则表达式可以返回更强大结果,如所有图片的名称,命令如下:

Picname=regexp(s,'[^/]*(gif|jpg)','match')
返 回结果:'logo.gif'    'gs.gif'

Urlread函数也可读取本地文件,使用file:///+ 文件路径名即可,如:s = urlread('file:///c:/winnt/matlab.ini')。

Urlwrite 读取url内容并写入文件

函数urlwrite读取给定url内容,并写入指定文件,语法为 urlwrite('url','filename')。例如:urlwrite('http://www.baidu.com', 'samples.html'),读取页面http://www.baidu.com的 内容,并保存至samples.html。

Xmlread:读取xml文件

语 法:DOMnode = xmlread(filename),函数返回文档对象模型DOM,而后可使用各类xml专用函数读取文档节点。例如,对于常用的新闻rss,可以使用 getElementsByTagName函数读取所有item节点,即新闻内容,而后使用getLength函数获得节点数,并循环取值。

以 下函数读取新闻项中所有节点,并生成一个结构数组:

function theStruct = DOMReader(filename)
xDoc = xmlread(filename);
allNewsItems = xDoc.getElementsByTagName('item');
for k = 0:allNewsItems.getLength-1
thisListItem = allNewsItems.item(k);
childNode = thisListItem.getFirstChild;
while ~isempty(childNode)      
tag = char(childNode.getTagName);
% 排除描述项
         if strcmp(tag,'description') == 0
childText = char(childNode.getFirstChild.getData);
strstrcut =strcat('iteminfo(',num2str(k+1),').',tag,'=''',childText,'''')
eval(strstrcut);
end
childNode = childNode.getNextSibling;
end % End WHILE
end % End FOR
theStruct = iteminfo;

本例使用了创建结构数组的函数struct,使用节点名称作为结构数组的字段名称,拼接字符串后使用函数 eval生成结构数组。以本站CFA专题新闻RSS为例,命令DOMReader (‘http://www.fincareer.com.cn/site/n1.xml’)将返回包含title(新闻标题),link(链接地址)和 pubDate(发布日期的)1×n结构数组,其中n为新闻条数。

Xmlwrite:生成xml文件

以 下脚本创建一个临时xml文件并打开编辑。

docNode = com.mathworks.xml.XMLUtils.createDocument...
('root_element')
docRootNode = docNode.getDocumentElement;
for i=1:20
thisElement = docNode.createElement('child_node');
thisElement.appendChild...
(docNode.createTextNode(sprintf('%i',i)));
docRootNode.appendChild(thisElement);
end
% Save the sample XML document.
xmlFileName = [tempname,'.xml'];
xmlwrite(xmlFileName,docNode);
edit(xmlFileName);

0 0
原创粉丝点击