IDL读取XML文件

使用IDL读取RADARSAT-2的数据,需要用到lutSigma.xml文件中的定标常数来计算相关参量。本文需要提取lutSigma.xml中的offset和gains参数。使用IDL来读取xml文件,并且提取特定的节点下的参数。经过实验找到了下面的方法:

lutSigma.xml文件示例

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<lut copyright="XXXXXXXXXXXXX">
  <offset>0.000000e+00</offset>
  <gains>5.374149e+03 5.374090e+03 </gains>
</lut>

读取方法

先定义一个函数
;+
; :Author: YQC
;- 读取xml的函数
FUNCTION filter_XML, oNode
  name = oNode->getNodeName()
  IF name EQ 'offset' OR name EQ 'gains' THEN $
    RETURN, 1 ; accept
  RETURN, 3 ;; skip
END

解释:这个函数用来标记想要的节点,比如本文要用到offset和gains这两个参数,所以当节点名等于offset或gains时候返回1

调用方法
;====读取xml====
oDoc = OBJ_NEW( 'IDLffXMLDOMDocument', FILENAME=datapath+patharr[fp]+'\lutSigma.xml' )
oNodeIterator = oDoc->createNodeIterator( OBJ_NEW(), FILTER_NAME='filter_XML' )

offt = 0  ;偏移量
vall = [] ;定标常数
cont = 0  ;计数器

oNode = oNodeIterator->nextNode()
WHILE OBJ_VALID( oNode ) DO BEGIN
  ;读取偏移量
  if cont eq 0 then begin
    offt = float((oNode->GetFirstChild())->getNodeValue())
  endif
  ;读取定标常数
  if cont eq 1 then begin
    vall = (oNode->GetFirstChild())->getNodeValue()
  endif
  cont++
  oNode = oNodeIterator->nextNode()
ENDWHILE
;print,vall
OBJ_DESTROY, oDoc
IDL设置float dobule数据类型的有效数字和小数点位数 IDL提取字符串中的数组

作者:,GIS爱好者。
分享本文,请您带上本文链接
分享到:

已有 3 条评论

  1. lay_giser
    1#
    lay_giser  · 2016-03-31 21:50

    老师您好,我是初学者,想利用xml文件读取影像四个角度的经纬度信息,想从您的代码上改进,请问您的代码怎么一直运行不了,不知能否将整个代码分享一下,我的邮箱xiashaliubo@163.com,谢谢!

      1. Sailor
        Sailor  · 2016-03-31 23:42

        这里主要一个示例,从我的工程中摘录出来的,主要是FILENAME这个字段要设置成自己的文件路径。然后调用函数即可。

          1. lay_giser
            lay_giser  · 2016-04-01 14:53

            我改了这个字段,但还是不能运行,我再试试或者换个方式

发表评论