Matlab 读取xml文件的一个简单例子
(2013-07-10 18:48:06)
标签:
matlabxml文化 |
分类: 科研 |
所要读取的xml文件如下:
<IMLs>0.005 0.007 0.0098
0.0137 0.0192 0.0269 0.0376 0.0527 0.0738 0.103 0.145 0.203 0.284
0.397 0.556 0.778 1.09 1.52 2.13</IMLs>
<gml:pos>116.556679644
38.7640703645</gml:pos>
</gml:Point>
<poEs>0.764679817743
0.662888722857 0.534651971396 0.395102975673 0.262868748692
0.156498150108 0.0839056548406 0.0398623492904 0.0168311356765
0.00628243377305 0.00192976563727 0.00050178417303
0.000101955783797 1.49877361281e-05 1.25257346917e-06
2.48172116758e-08 0.0 0.0 0.0</poEs>
</hazardCurve>
<gml:pos>116.560354569
39.2137311674</gml:pos>
</gml:Point>
<poEs>0.819195867027
0.745982415614 0.650046705716 0.538095912232 0.42148331053
0.314451605987 0.226852492161 0.157895373067 0.105089631293
0.0655477304784 0.0365455920132 0.0179762171754 0.00739120623057
0.00242299927625 0.000555837553419 7.80321663033e-05
3.68909948061e-06 4.68251725086e-08 0.0</poEs>
</hazardCurve>
<gml:pos>116.564112835
39.6633919704</gml:pos>
</gml:Point>
<poEs>0.818984158857
0.748053882014 0.660281270455 0.563565016939 0.465616471518
0.372887218748 0.289156026001 0.213045568572 0.14661406957
0.0926499641819 0.0516418099588 0.0253320791887 0.0105544475567
0.00367398872789 0.00100376612408 0.000217455272141
3.76724116531e-05 5.4251531106e-06
3.86226385822e-08</poEs>
</hazardCurve>
Tcoordinate=char(Coordinate.item(jj).getFirstChild.getData); %获得第jj个坐标的内容
Tpoes=char(Poes.item(jj).getFirstChild.getData); %获得第jj个超越概率数值内容
Tcoor=str2num(Tcoordinate); %把以上内容转换为数值形式
poes(jj+1,:)=str2num(Tpoes); %把以上内容转换为数值形式并储存在poes向量中
coordinate(jj+1,1)=Tcoor(1); %把坐标储存在coordinate向量中
coordinate(jj+1,2)=Tcoor(2); %把坐标储存在coordinate向量中
<?xml version="1.0" encoding="UTF-8" ?>
。。。。。。。。。。。。。。。。
后面还有很多,不过都是一样的就是由许多<hazardCurve>组成。
要读取的有三类数据,一个是<IMLs>后面那一行数据,代表加速度水平,一个是<gml:pos>后面那一行数,是坐标,还有一个就是<poEs>后面那一行,代表超越概率。
首先,要明白<IMLs><gml:pos><poEs>这些都叫Tag。
m文件如下:(上面那个xml文件取名为test.xml好了)
clc
clear
Doc=xmlread('test.xml');
%读入xml文件
IML=Doc.getElementsByTagName_r('IMLs');%把名为IMLs的所有标签储存在IML里
Coordinate=Doc.getElementsByTagName_r('gml:pos');%同上
Poes=Doc.getElementsByTagName_r('poEs');%同上
IMLContent=char(IML.item(0).getFirstChild.getData);%因为xml里只有一个IMLs标签,这里不用循环。
IMLn=str2num(IMLContent);
%必须用str2num,不能用str2double
把获得的加速度值转化为数字形式
nSites=Coordinate.getLength;
%工程场地的个数
coordinate=zeros(nSites,2);
% 把坐标向量的维数定好,先以0代替
poes=zeros(nSites,length(IMLn));%把超越概率值的维数定好,以0代替
for jj=0:nSites-1 % <</span>gml:pos>有多个,所以必须循环,而且是从0开始的
end
前一篇:初到日内瓦