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. mac 用密钥远程登陆

    window远程登陆命令:mstsc A为本地主机(即用于控制其他主机的机器) ;B为远程主机(即被控制的机器Server), 假如ip为192.168.60.110;A和B的系统都是Linux 在A ...

  2. 百道CTF刷题记录(一)

    简介 最近在刷CTF题,主攻Web,兼职Misc Shiyanbar 0x01 简单的登陆题 简单概括: 考点: %00截断正则 CBC字节翻转攻击 难度: 难 WP:https://blog.csd ...

  3. 六、django rest_framework源码之解析器剖析

    1 绪论 网络传输数据只能传输字符串格式的,如果是列表.字典等数据类型,需要转换之后才能使用但是我们之前的rest_framework例子都没有转换就直接可以使用了,这是因为rest_framewor ...

  4. JAVAEE——SpringMVC第二天:高级参数绑定、@RequestMapping、方法返回值、异常处理、图片上传、Json交互、实现RESTful、拦截器

    1. 课前回顾 https://www.cnblogs.com/xieyupeng/p/9093661.html 2. 课程计划 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 ...

  5. Python发送带附件的邮件

    看别人的博客就不要在往别人的邮箱里发东西了行不行, 有点素质可以吗!!! 写出来分享还不知道珍惜!!!!! #-*-encoding:utf-8 -*- import os import smtpli ...

  6. [BZOJ3507][CQOI2014]通配符匹配(DP+Hash)

    显然f[i][j]表示S匹配到第i个通配符,T匹配到第j个字符,是否可行. 一次一起转移两个通配符之间的所有字符,Hash判断. 稍微有点细节.常数极大卡时过排名倒数,可能是没自然溢出的原因. #in ...

  7. 【堆优化Dijkstra】BZOJ4152- [AMPPZ2014]The Captain

    [题目大意] 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. [思路] 按照某维坐标排序,相邻两个点在这一维度 ...

  8. zoj 3537 区间dp+计算几何

    题意:给定n个点的坐标,先问这些点是否能组成一个凸包,如果是凸包,问用不相交的线来切这个凸包使得凸包只由三角形组成,根据costi, j = |xi + xj| * |yi + yj| % p算切线的 ...

  9. ROS知识(7)----ROS命令中的单引号`和‘的混淆问题

    ROS命令中的单引号`和‘的区别,比如使用`单引号,以下的命令是正确的: $ rosrun rviz rviz -d `rospack find rbx1_nav`/sim.rviz 而使用‘单引号, ...

  10. IntelliJ IDEA 查看继承关系

    在 IntelliJ IDEA 中这个查看一个类也就是当前类的所有继承关系,包括实现的所有的接口和继承的类, 这个继承,不仅仅是一级的继承关系,包括好几层的继承.父类的父类的父类.直到最后.可以很清楚 ...