加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab 读取xml文件的一个简单例子

(2013-07-10 18:48:06)
标签:

matlab

xml

文化

分类: 科研
所要读取的xml文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
- <nrml xmlns:gml="http://www.opengis.net/gml" xmlns="http://openquake.org/xmlns/nrml/0.4">
- <hazardCurves statistics="mean" IMT="PGA" investigationTime="50.0">
  <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>
- <hazardCurve>
- <gml:Point>
  <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>
- <hazardCurve>
- <gml:Point>
  <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>
- <hazardCurve>
- <gml:Point>
  <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>
。。。。。。。。。。。。。。。。

后面还有很多,不过都是一样的就是由许多<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开始的
    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向量中
end

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有