featuretypelistparser.java

来自「esri的ArcGIS Server超级学习模板程序(for java)」· Java 代码 · 共 99 行

JAVA
99
字号
package com.esri.solutions.jitk.datasources.ogc.wfs.parsing;

import java.util.ArrayList;
import java.util.List;

import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.XMLEvent;

import com.esri.solutions.jitk.datasources.ogc.gml.GMLPoint;
import com.esri.solutions.jitk.datasources.ogc.gml.parsing.GMLParsingException;
import com.esri.solutions.jitk.datasources.ogc.gml.parsing.GMLPointParser;
import com.esri.solutions.jitk.datasources.ogc.wfs.FeatureTypeDescription;
import com.esri.solutions.jitk.datasources.ogc.wfs.parsing.stax.IElementParser;

public class FeatureTypeListParser implements IElementParser {
	List<FeatureTypeDescription> _featureTypes = null;
	
	/**
	 * - <wfs:FeatureTypeList>
	 * 
			- <wfs:FeatureType>
			  <wfs:Name>WfsTest:counties</wfs:Name> 
			  <wfs:Title>counties</wfs:Title> 
			  <wfs:DefaultSRS>urn:x-ogc:def:crs:EPSG:6.9:4269</wfs:DefaultSRS> 
			  <wfs:OtherSRS>urn:x-ogc:def:crs:EPSG:6.9:4326</wfs:OtherSRS> 
			- <wfs:OutputFormats>
			  <wfs:Format>text/xml; subType=gml/3.1.1/profiles/gmlsf/1.0.0/0</wfs:Format> 
			  </wfs:OutputFormats>
			- <ows:WGS84BoundingBox>
			  <ows:LowerCorner>-178.217598362366 18.9247817993165</ows:LowerCorner> 
			  <ows:UpperCorner>-66.9692710360024 71.4062353532711</ows:UpperCorner> 
			  </ows:WGS84BoundingBox>
			  </wfs:FeatureType>
			  
			- <wfs:FeatureType>
			:
			:
	 */
	public FeatureTypeListParser() {
	}
	
	public void parse(XMLEventReader xmler, XMLEvent currentEvent) throws XMLStreamException, GMLParsingException {
		XMLEvent event;
		_featureTypes = new ArrayList<FeatureTypeDescription>();
		FeatureTypeDescription currentFt = null; 
		String currentElementName = "";
		GMLPointParser gmlPointParser = new GMLPointParser();
		
		
		while (xmler.hasNext()) {
			event = xmler.nextEvent();
			
			if (event.isStartElement()) {
				currentElementName = event.asStartElement().getName().getLocalPart();
				
				if (currentElementName.equals("FeatureType")) {
					currentFt = new FeatureTypeDescription();
				}				
			}

			if (event.isCharacters()) {      				
				if (currentElementName.equals("Name")) {
					String name = event.asCharacters().getData();
					currentFt.setXSDName(name);
				} else if (currentElementName.equals("Title")) {
					currentFt.setTitle(event.asCharacters().getData());
				} else if (currentElementName.equals("DefaultSRS")) {
					currentFt.setDefaultSrs(event.asCharacters().getData());
				} else if (currentElementName.equals("OtherSRS")) {
					currentFt.addOtherSrs(event.asCharacters().getData());
				} else if (currentElementName.equals("LowerCorner")) {
					GMLPoint point = gmlPointParser.parsePointFromRawGMLData(event.asCharacters().getData());
					currentFt.setLowerCorner(point);
				} else if (currentElementName.equals("UpperCorner")) {
					GMLPoint point = gmlPointParser.parsePointFromRawGMLData(event.asCharacters().getData());
					currentFt.setUpperCorner(point);
				}
			} 
			
			if (event.isEndElement()) {
				String endElement = event.asEndElement().getName().getLocalPart();
				if (endElement.equals("FeatureType")) {
					_featureTypes.add(currentFt);
				}	
				
				if (endElement.equals("FeatureTypeList")) {
					// Stop pull parsing
					break;
				}				
			}			
		}			
	}
	
	public List<FeatureTypeDescription> getFeatureTypes() {
		return _featureTypes;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?