java程序如下:

package gao.map.preprocess;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.Attributes;
import org.xml.sax.SAXException; /**
* 处理从OpenStreetMap下载的原始数据,将抽取的数据输出为text文件
* @author Administrator
*
*/
public class OpenStreetMap {
static String s = null;
//实现自己的解析方式
static class MySAXHandler extends DefaultHandler { FileOutputStream fosPoint;
FileOutputStream fosArc;
OutputStreamWriter oswPoint;
OutputStreamWriter oswArc;
BufferedWriter bwPoint;
BufferedWriter bwArc;
//开始解析时调用
public void startDocument() throws SAXException {
// 点信息
File pointFile = new File("D:\\项目\\mongo\\MapPre\\Point.txt");
// 弧信息
File arcFile = new File("D:\\项目\\mongo\\MapPre\\Arc.txt");
try {
fosPoint = new FileOutputStream(pointFile);
fosArc = new FileOutputStream(arcFile);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
oswPoint = new OutputStreamWriter(fosPoint);
oswArc = new OutputStreamWriter(fosArc);
bwPoint = new BufferedWriter(oswPoint);
bwArc = new BufferedWriter(oswArc);
System.out.println("开始解析文档!");
} //完成解析时调用
public void endDocument() throws SAXException {
try {
bwPoint.close();
oswPoint.close();
fosPoint.close();
bwArc.close();
oswArc.close();
fosArc.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("文档解析完成!");
} /**
* 开始一个元素的解析
* @param uri
* @param localName
* @param qName 标签名
* @param attributes 属性
* @throws SAXException
*/
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if ((attributes != null)&&attributes.getLength() > 0) {
if(qName.equals("node")){
StringBuilder sb = new StringBuilder();
sb.append(attributes.getValue("id")+" ");
sb.append(attributes.getValue("lat")+" ");
sb.append(attributes.getValue("lon"));
try {
bwPoint.write(sb.toString()+"\r\n");
bwPoint.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(sb.toString());
}else if(qName.equals("way")){
s = attributes.getValue("id")+" "
+attributes.getValue("version")+" ";
}else if(qName.equals("nd")){
if(s==null)
return;
try {
bwArc.write(s+attributes.getValue("ref")+" \r\n");
bwArc.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(s+attributes.getValue("ref")+" ");
}else if(qName.equals("tag")){
if(s==null)
return;
try {
bwArc.write(s+" "+attributes.getValue("k")+"\r\n");
bwArc.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(s+" "+attributes.getValue("k"));
}else if(qName.equals("relation")){
if(s!=null)
s = null;
}
}
} /**
* 结束一个元素的解析,遇到结束标签时调用此方法 通常在此方法对标签取值并处理
* @param uri
* @param localName
* @param qName
* @throws SAXException
*/
public void endElement(String uri, String localName, String qName)
throws SAXException { } //该方法是获得元素间的text文本内容,可以通过new String(ch, start, length)来获得
public void characters(char[] ch, int start, int length)
throws SAXException {
// System.out.print(new String(ch, start, length));
}
} public static void main(String[] args) {
SAXParserFactory saxfac = SAXParserFactory.newInstance();
try {
SAXParser saxparser = saxfac.newSAXParser();
InputStream is = new FileInputStream("D:\\项目\\map");
MySAXHandler handler = new MySAXHandler();
saxparser.parse(is, handler);;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

参考链接:

四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

快速有效的解析大型XML文件

详解Java解析XML的四种方法—DOM/SAX/jdom/dom4j

用java解析在OpenStreetMap上下载的地图数据(SAX版,适合比较大的xml文件)的更多相关文章

  1. 用java解析在OpenStreetMap上下载的地图数据

    采用dom4j解析下载的xml文件,java程序如下: package gao.map.preprocess; import java.io.BufferedWriter; import java.i ...

  2. java web 通过前台输入的数据(name-value)保存到后台 xml文件中

    一:项目需求,前端有一个页面,页面中可以手动输入一些参数数据,通过点击前端的按钮,使输入的数据保存到后台生成的.xml文件中 二:我在前端使用的是easyui的propertygrid,这个能通过da ...

  3. java模拟从http上下载文件

    1.依赖 Apache httpclient 包. 2.代码 HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = ...

  4. Java XML文件解析

    四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例) 蓝色字体内容由上一篇博文中补充进来的,写作风格比较好,大家有兴趣可以去查看原文 众所周知,现在解析XML的方法越来越多,但主流的方法也就四 ...

  5. java解析xml的4种经典方法

    ========================================== xml文件 <?xml version="1.0" encoding="GB2 ...

  6. JAVA解析XML的四种方式

    java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...

  7. java解析xml文件四种方式

    1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找 ...

  8. 高性能Java解析器实现过程详解

    如果你没有指定数据或语言标准的或开源的Java解析器, 可能经常要用Java实现你自己的数据或语言解析器.或者,可能有很多解析器可选,但是要么太慢,要么太耗内存,或者没有你需要的特定功能.或者开源解析 ...

  9. java解析xml字符串方法

    一,用DOM4J  针对无重复标签的xml字符串格式,如下: 针对此种情况可用DOM4J解析法,引入 dom4j的相关jar包代码如下: Document document=DocumentHelpe ...

随机推荐

  1. nginx一些细节知识点补充

    1.upstream 配置代理 upstream local_tomcat { server localhost:8080; } server{ location / { proxy_pass htt ...

  2. UVa210 Concurrency Simulator (ACM/ICPC World Finals 1991) 双端队列

    Programs executed concurrently on a uniprocessor system appear to be executed at the same time, but ...

  3. c/c++--strlen()小问题

    int x = 2; char * str = "abcd"; int y = (x - strlen(str)) / 3; printf("%d\n", y) ...

  4. Logback配置解析

    logback优点 比较吸引的几个优点如下: 内核重写,初始化内存加载更小 文档比较齐全 支持自动重新加载配置文件,扫描过程快且安全,它并不需要另外创建一个扫描线程 支持自动去除旧的日志文件,可以控制 ...

  5. SPOJ8791 DYNALCA LCT

    考虑\(LCT\) 不难发现,我们不需要换根... 对于操作\(1\),\(splay(u)\)然后连虚边即可 对于操作\(3\),我们可以先\(access(u)\),然后再\(access(v)\ ...

  6. the elements of computing systems 的读书笔记2

    懒癌发作,本来计划是两到三天就一个unit的,没想到一直拖到今天才完成第二部分(6-8章). 第6章,介绍了hack汇编到二进制,也就是用翻译到01来表示.从课后习题来看,这一章目的就是设计一个程序( ...

  7. word-ladder总结

    title: word ladder总结 categories: LeetCode tags: 算法 LeetCode comments: true date: 2016-10-16 09:42:30 ...

  8. Codeforces Round #275 (Div. 1)A. Diverse Permutation 构造

    Codeforces Round #275 (Div. 1)A. Diverse Permutation Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 ht ...

  9. 和程序有关的一个游戏<<mu complex>> 攻略

    最速打法: 1 - login, brucedayton 2 - login, allomoto 3 - login, m3g4pa55word 4 - unlock, 03/18/34 5 - ss ...

  10. Jmeter实现webservice的接口测试

    前提条件 测试的URL:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx 测试接口:getSupportCityString 获取城市的编码:htt ...