Flex RIA的ArcIMS WebGIS之路(四)获取数据,解析与操作XML

不知道什么原因,Flex到现在都没有提供直接访问数据库的功能,而WebGIS系统的后台通常是一个企业级数据库,伤透了脑筋啊,举目四望,竟然束手无策,翻遍了资料才找到的救命稻草--XML。没有办法啦,只好用学了半吊子DOM来应付数据访问问题了。如何访问数据库?通过httpRequest与Asp.net交互,Asp.Net把数据库查询的结果通过DataSet.WriteXML将XML格式的结果返回给Flash文件。幸好,DataSet生成的XML格式是固定的,不然解析就麻烦咯!怎么解析呢?Flex提供了有点奇怪的XML访问方式,当然也是兼容DOM的啦!通常需要遍历获取数据例如查询了名称后绑定到ComboBox上面怎么做呢?
protected function SelectionChanged(e:Event):void
  {
   
   if( m_hook.Map.MapSelection != "")
   {
    m_DataSource = new XMLList(m_hook.Map.MapSelection);
    this.cbName.dataProvider = m_DataSource.Table;
    BindSubItem();
    var singleItem:XMLList = new XMLList(cbName.selectedItem.toString());
    LocateFeature(singleItem.child("OBJECTID").toString());
   }
   else
   {
    this.cbName.dataProvider = null;
    this.dgProperty.dataProvider = null;
   }
  }
其中的m_DataSource 就是一段XML的数据啦,通过OBJECTID等子节点的名称就可以访问到数据啦。还是挺方便的。
而遍历节点也很方便
for(var DataNode:String in QueryResult.child(ArcXML.NodeResponse).child(ArcXML.NodeFeatures).child(ArcXML.NodeFeature))
   {
    var featrueNode:XMLList = new XMLList(QueryResult.child(ArcXML.NodeResponse).child(ArcXML.NodeFeatures).child(ArcXML.NodeFeature)[DataNode]);
    FieldID = featrueNode.child(ArcXML.NodeFields).child(ArcXML.NodeField).attribute(ArcXML.AttributeFieldName).toString();
    var FieldIDValue:String = featrueNode.child(ArcXML.NodeFields).child(ArcXML.NodeField).attribute(ArcXML.AttributeFieldValue).toString();
    valueArray.push( FieldIDValue);
    
   }
ArcXML.*****都是ArcXML的关键字,为方便起见,定义一个ArcXML的类,将这些关键字定义成静态常量,便于统一管理。这段代码就是将ArcXML的返回结果进行解析,这是一个多层查询的例子,遍历每一层的选择集,获取数据。不用多说了吧。

原文地址:https://www.cnblogs.com/Brune/p/622850.html