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. Gitlab管理用户、组、权限(二)

    一. 保护主要分支 保护某个分支,不让项目中其它的成员进行改变里面的内容,和不允许他们进行和保护的分支进行合并.当某个分支设置为保护的时候,那么拥有开者者权限或以下的权限都会受到影响. 执行步骤: 1 ...

  2. hdoj1203 I NEED A OFFER!(DP,01背包)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1203 思路 求最少能收到一份offer的最大概率,可以先求对立面:一份offer也收不到的最小概率,然 ...

  3. 基于Laravel开发博客应用系列 —— 十分钟搭建博客系统

    1.创建文章数据表及其模型(0:00~2:30) 我们已经在上一节中为博客项目完成了大部分准备工作,现在首先要做的就是为这个项目创建一个新的文章表 posts及该表对应的模型类 Post,使用如下Ar ...

  4. Bazel

    Using Bazel on Windows Google软件构建工具Bazel FAQ

  5. 【基本功】深入剖析Swift性能优化

    简介 2014年,苹果公司在WWDC上发布Swift这一新的编程语言.经过几年的发展,Swift已经成为iOS开发语言的“中流砥柱”,Swift提供了非常灵活的高级别特性,例如协议.闭包.泛型等,并且 ...

  6. 2018用IDEA搭建SSM框架(Spring+SpringMVC+Mybatis)

    使用IDEA搭建ssm框架 环境 工具:IDEA 2018.1 jdk版本:jdk1.8.0_171 Maven版本:apache-maven-3.5.3 Tomcat版本:apache-tomcat ...

  7. 开始一个Django项目的简单方法

    DATABASES = {     'default': {         'ENGINE': 'django.db.backends.mysql',         'NAME': '数据库名(你 ...

  8. Git 统计提交代码行数

    指定用户名 git log --author="your_name_here" --pretty=tformat: --numstat | awk '{ add += $1; su ...

  9. [BZOJ 4809] 相逢是问候

    Link: 传送门 Solution: 以前没见过的套路题…… 1.使用EXT欧拉定理降幂的套路: $a^{x}=a^{xmod\phi(P)+\phi(P)} mod P$,且$x\ge P$ 这样 ...

  10. BZOJ.3498.[PA2009]Cakes(三元环 枚举)

    题目链接 感觉我可能学的假的(复杂度没问题,但是常数巨大). 一个比较真的说明见这儿:https://czyhe.me/blog/algorithm/3-mem-ring/3-mem-ring/. \ ...