准备工作

jar 包

dom4j-2.0.3.jar
hutool-all-5.7.12.jar
gson-2.8.0.jar

kml 文件

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"><Document><Folder><name>系统默认任务</name><Placemark><Style><IconStyle><Icon><href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href></Icon><color>ffffffff</color><scale>1</scale></IconStyle></Style><OvAttr><OvIcon>4</OvIcon><OvIconNum>0</OvIconNum><OvAttaList><OvAttaItem>d89cd0ad-a5c8-4862-b042-1c5dc8858afd.jpg</OvAttaItem><OvAttaItem>edf53fe0-93bb-4338-af4c-bc59d8bca646.jpg</OvAttaItem><OvAttaItem>2ae9bd50-ffa5-4a95-b0c3-25ffe9b2ed6f.mp4</OvAttaItem></OvAttaList></OvAttr><name>A1</name><Point><coordinates>122.90521628553613,27.703774764680027,0</coordinates></Point></Placemark><Placemark><Style><IconStyle><Icon><href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href></Icon><color>ffffffff</color><scale>1</scale></IconStyle></Style><OvAttr><OvIcon>4</OvIcon><OvIconNum>0</OvIconNum><OvAttaList><OvAttaItem>3e4da924-4158-4f84-9dde-61765835e4ab.jpg</OvAttaItem><OvAttaItem>17ed3394-f384-410f-a67d-f17e68e1bacd.jpg</OvAttaItem></OvAttaList></OvAttr><name>A2</name><Point><coordinates>121.92842338001357,27.683479318586112,0</coordinates></Point></Placemark><Placemark><Style><IconStyle><Icon><href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href></Icon><color>ffffffff</color><scale>1</scale></IconStyle></Style><OvAttr><OvIcon>4</OvIcon><OvIconNum>0</OvIconNum><OvAttaList><OvAttaItem>f64961e8-2770-4dfc-88c4-7d4be637e40b.jpg</OvAttaItem><OvAttaItem>bf4be5c5-1413-4e35-b017-e8534fcd3693.jpg</OvAttaItem></OvAttaList></OvAttr><name>A3</name><Point><coordinates>122.95213066064754,27.676302134985708,0</coordinates></Point></Placemark></Folder></Document>
</kml>

Bean

BackendProject

package com.company.kmldemo;/*** @author bfsz* @version 1.0* @description: TODO* @date 2021/9/22 15:53*/
public class BackendProject {private String uuid;private String projectName;private String projectDesc;private String projectUrl;private int version;private int deleted;private String mapJson;private boolean isDefault;private String createTime;private String updateTime;public BackendProject(String uuid, String projectName, String projectDesc, String projectUrl, int version, int deleted, String mapJson, boolean isDefault, String createTime, String updateTime) {this.uuid = uuid;this.projectName = projectName;this.projectDesc = projectDesc;this.projectUrl = projectUrl;this.version = version;this.deleted = deleted;this.mapJson = mapJson;this.isDefault = isDefault;this.createTime = createTime;this.updateTime = updateTime;}// =========================================================================public BackendProject(String projectName, String projectDesc) {this.projectName = projectName;this.projectDesc = projectDesc;}public BackendProject() {}public String getUuid() {return uuid;}public void setUuid(String uuid) {this.uuid = uuid;}public String getProjectName() {return projectName;}public void setProjectName(String projectName) { this.projectName = projectName; }public String getProjectDesc() {return projectDesc;}public void setProjectDesc(String projectDesc) { this.projectDesc = projectDesc; }public String getProjectUrl() {return projectUrl == null ? "" : projectUrl;}public void setProjectUrl(String projectUrl) { this.projectUrl = projectUrl; }public int getVersion() {return version;}public int getDeleted() {return deleted;}public String getMapJson() {return mapJson;}public void setMapJson(String mapJson) {this.mapJson = mapJson;}public boolean isDefault() {return isDefault;}public String getCreateTime() {return createTime;}public void setCreateTime(String createTime) { this.createTime = createTime; }public String getUpdateTime() {return updateTime == null ? "" : updateTime;}public void setVersion(int version) { this.version = version; }public void setDeleted(int deleted) { this.deleted = deleted; }public void setDefault(boolean aDefault) { isDefault = aDefault; }public void setUpdateTime(String updateTime) { this.updateTime = updateTime; }@Overridepublic String toString() { return JsonManager.getInstance().gson().toJson(this); }}

MapData

package com.company.kmldemo;import java.util.ArrayList;
import java.util.List;/*** @author bfsz* @version 1.0* @description: TODO* @date 2021/9/22 16:12*/
public class MapData {private ArrayList<Point> points;private ArrayList<Line> lines;public List<Point> getPoints() {return points;}public List<Line> getLines() {return lines;}public void setPoints(ArrayList<Point> points) {this.points = points;}public void setLines(ArrayList<Line> lines) {this.lines = lines;}@Overridepublic String toString() {return JsonManager.getInstance().gson().toJson(this);}public static class Point {private String uuid;private String name;private String description;private Coordinate coordinate;private ArrayList<File> files;public String getUuid() {return uuid;}public String getName() {return name;}public String getDescription() {return description;}public Coordinate getCoordinate() {return coordinate;}public ArrayList<File> getFiles() {return files;}public void setUuid(String uuid) {this.uuid = uuid;}public void setName(String name) {this.name = name;}public void setDescription(String description) {this.description = description;}public void setCoordinate(Coordinate coordinate) {this.coordinate = coordinate;}public void setFiles(ArrayList<File> files) {this.files = files;}@Overridepublic String toString() {return JsonManager.getInstance().gson().toJson(this);}}public static class Line {private String name;private String description;private ArrayList<Coordinate> coordinates;private ArrayList<File> files;public String getName() {return name;}public String getDescription() {return description;}public ArrayList<File> getFiles() {return files;}@Overridepublic String toString() {return JsonManager.getInstance().gson().toJson(this);}}public static class Coordinate {private double lat;private double lng;public double getLat() {return lat;}public double getLng() {return lng;}public void setLat(double lat) {this.lat = lat;}public void setLng(double lng) {this.lng = lng;}@Overridepublic String toString() {return JsonManager.getInstance().gson().toJson(this);}}public static class File {private String type; // image, videoprivate String name;private String localPath;private String path;private String date;public String getType() {return type;}public String getName() {return name;}public String getLocalPath() {return localPath;}public void setLocalPath(String localPath) {this.localPath = localPath;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public String getDate() {return date;}public void setType(String type) {this.type = type;}public void setName(String name) {this.name = name;}public void setDate(String date) {this.date = date;}@Overridepublic String toString() {return JsonManager.getInstance().gson().toJson(this);}}
}

Json工具类

package com.company.kmldemo;import com.google.gson.Gson;
import com.google.gson.GsonBuilder;/*** @author bfsz* @version 1.0* @description: TODO* @date 2021/9/24 16:50*/
public class JsonManager {private static final JsonManager mInstance = new JsonManager();private final Gson mGson;public static JsonManager getInstance() {return mInstance;}private JsonManager() {mGson = new GsonBuilder().disableHtmlEscaping().create();}public Gson gson() {return mGson;}
}

KmlUtil 解析 kml 工具类

package com.company.kmldemo;import cn.hutool.core.date.DateUtil;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;/*** @author bfsz* @version 1.0* @description: KmlUtil* @date 2021/9/22 14:25*/
public class KmlUtil {/*** @param file* @return*/public static List<BackendProject> kml2projects(File file) {SAXReader reader = new SAXReader();Document doc = null;try {doc = reader.read(file);} catch (DocumentException e) {e.printStackTrace();}return getResultJSON(doc);}/*** @param kmlString* @return*/public static List<BackendProject> kml2projects(String kmlString) {Document doc = null;try {doc = DocumentHelper.parseText(kmlString.trim());} catch (DocumentException e) {e.printStackTrace();}return getResultJSON(doc);}/*** @param doc* @return*/private static List<BackendProject> getResultJSON(Document doc) {List<BackendProject> projects = new ArrayList<>();if (doc == null) {return projects;}List<Element> rootEls = doc.getRootElement().elements();for (Element rootEl : rootEls) {List<Element> documentEls = rootEl.elements();for (Element documentEl : documentEls) {if (documentEl.getName().equals("Folder")) {List<Element> folderEls = documentEl.elements();BackendProject project = new BackendProject();MapData mapData = new MapData();ArrayList<MapData.Point> points = new ArrayList<>();ArrayList<MapData.Line> lines = new ArrayList<>();for (Element folderEl : folderEls) {if (folderEl.getName().equals("name")) {project.setProjectName(folderEl.getStringValue());}if (folderEl.getName().equals("Placemark")) {List<Element> placemarkEls = folderEl.elements();ArrayList<MapData.File> filesDTOSList = new ArrayList<>();MapData.Point pointsDTO = new MapData.Point();for (Element placeMarkEl : placemarkEls) {if (placeMarkEl.getName().equals("name")) {pointsDTO.setName(placeMarkEl.getStringValue());pointsDTO.setDescription("");pointsDTO.setUuid(UUID.randomUUID().toString());}if (placeMarkEl.getName().equals("Point")) {String coordinates = placeMarkEl.element("coordinates").getStringValue().trim();MapData.Coordinate coordinateDTO = new MapData.Coordinate();coordinateDTO.setLat(Double.parseDouble(coordinates.split(",")[1]));coordinateDTO.setLng(Double.parseDouble(coordinates.split(",")[0]));pointsDTO.setCoordinate(coordinateDTO);}if (placeMarkEl.getName().equals("OvAttr")) {List<Element> ovAttaList = placeMarkEl.element("OvAttaList").elements();for (Element ovAttaListE : ovAttaList) {MapData.File filesDTO = new MapData.File();String name = ovAttaListE.getStringValue().trim();String type = name.endsWith("mp4") ? "video" : "image";filesDTO.setName(name);filesDTO.setLocalPath(name);filesDTO.setType(type);filesDTO.setPath("");filesDTO.setDate(DateUtil.now());filesDTOSList.add(filesDTO);}}pointsDTO.setFiles(filesDTOSList);}points.add(pointsDTO);}}mapData.setPoints(points);mapData.setLines(lines);project.setMapJson(JsonManager.getInstance().gson().toJson(mapData));project.setCreateTime("");project.setProjectDesc("");project.setProjectUrl("");project.setUpdateTime("");project.setUuid("");project.setDefault(false);project.setDeleted(0);project.setVersion(0);projects.add(project);}}}return projects;}
}

使用

package com.company;import com.company.kmldemo.KmlUtil;import java.io.File;public class Main {public static void main(String[] args) {// 文件List<BackendProject> backendProjects = KmlUtil.kml2projects(new File("E:\\IdeaProjects\\Java-Demo\\src\\com\\company\\kmldemo\\xmls\\kml922.kml"));// 字符串List<BackendProject> backendProjects1 = KmlUtil.kml2projects("<?xml version=\"1.0\" encoding=\"UTF-8\"?><kml xmlns=\"http://www.opengis.net/kml/2.2\"><Document><Folder><name>系统默认任务</name><Placemark><Style><IconStyle><Icon><href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href></Icon><color>ffffffff</color><scale>1</scale></IconStyle></Style><OvAttr><OvIcon>4</OvIcon><OvIconNum>0</OvIconNum><OvAttaList><OvAttaItem>d89cd0ad-a5c8-4862-b042-1c5dc8858afd.jpg</OvAttaItem><OvAttaItem>edf53fe0-93bb-4338-af4c-bc59d8bca646.jpg</OvAttaItem><OvAttaItem>2ae9bd50-ffa5-4a95-b0c3-25ffe9b2ed6f.mp4</OvAttaItem></OvAttaList></OvAttr><name>A1</name><Point><coordinates>106.90521628553613,27.703774764680027,0</coordinates></Point></Placemark><Placemark><Style><IconStyle><Icon><href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href></Icon><color>ffffffff</color><scale>1</scale></IconStyle></Style><OvAttr><OvIcon>4</OvIcon><OvIconNum>0</OvIconNum><OvAttaList><OvAttaItem>3e4da924-4158-4f84-9dde-61765835e4ab.jpg</OvAttaItem><OvAttaItem>17ed3394-f384-410f-a67d-f17e68e1bacd.jpg</OvAttaItem></OvAttaList></OvAttr><name>A2</name><Point><coordinates>106.92842338001357,27.683479318586112,0</coordinates></Point></Placemark><Placemark><Style><IconStyle><Icon><href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href></Icon><color>ffffffff</color><scale>1</scale></IconStyle></Style><OvAttr><OvIcon>4</OvIcon><OvIconNum>0</OvIconNum><OvAttaList><OvAttaItem>f64961e8-2770-4dfc-88c4-7d4be637e40b.jpg</OvAttaItem><OvAttaItem>bf4be5c5-1413-4e35-b017-e8534fcd3693.jpg</OvAttaItem></OvAttaList></OvAttr><name>A3</name><Point><coordinates>106.95213066064754,27.676302134985708,0</coordinates></Point></Placemark></Folder></Document></kml>");System.out.println(backendProjects);System.out.println(backendProjects1);}
}

结果:

{"uuid":"","projectName":"系统默认任务","projectDesc":"","projectUrl":"","version":0,"deleted":0,"mapJson":"{\"points\":[{\"uuid\":\"e029eef2-aabc-4852-bac8-7e3b242f705a\",\"name\":\"A1\",\"description\":\"\",\"coordinate\":{\"lat\":27.703774764680027,\"lng\":106.90521628553613},\"files\":[{\"type\":\"image\",\"name\":\"d89cd0ad-a5c8-4862-b042-1c5dc8858afd.jpg\",\"localPath\":\"d89cd0ad-a5c8-4862-b042-1c5dc8858afd.jpg\",\"path\":\"\",\"date\":\"2021-09-24 16:54:17\"},{\"type\":\"image\",\"name\":\"edf53fe0-93bb-4338-af4c-bc59d8bca646.jpg\",\"localPath\":\"edf53fe0-93bb-4338-af4c-bc59d8bca646.jpg\",\"path\":\"\",\"date\":\"2021-09-24 16:54:17\"},{\"type\":\"video\",\"name\":\"2ae9bd50-ffa5-4a95-b0c3-25ffe9b2ed6f.mp4\",\"localPath\":\"2ae9bd50-ffa5-4a95-b0c3-25ffe9b2ed6f.mp4\",\"path\":\"\",\"date\":\"2021-09-24 16:54:17\"}]},{\"uuid\":\"b58683fe-64d9-4b91-a237-8336c9b71f69\",\"name\":\"A2\",\"description\":\"\",\"coordinate\":{\"lat\":27.683479318586112,\"lng\":106.92842338001357},\"files\":[{\"type\":\"image\",\"name\":\"3e4da924-4158-4f84-9dde-61765835e4ab.jpg\",\"localPath\":\"3e4da924-4158-4f84-9dde-61765835e4ab.jpg\",\"path\":\"\",\"date\":\"2021-09-24 16:54:17\"},{\"type\":\"image\",\"name\":\"17ed3394-f384-410f-a67d-f17e68e1bacd.jpg\",\"localPath\":\"17ed3394-f384-410f-a67d-f17e68e1bacd.jpg\",\"path\":\"\",\"date\":\"2021-09-24 16:54:17\"}]},{\"uuid\":\"bf7a325e-1e3a-4c97-b51b-792e5cfd6bb4\",\"name\":\"A3\",\"description\":\"\",\"coordinate\":{\"lat\":27.676302134985708,\"lng\":106.95213066064754},\"files\":[{\"type\":\"image\",\"name\":\"f64961e8-2770-4dfc-88c4-7d4be637e40b.jpg\",\"localPath\":\"f64961e8-2770-4dfc-88c4-7d4be637e40b.jpg\",\"path\":\"\",\"date\":\"2021-09-24 16:54:17\"},{\"type\":\"image\",\"name\":\"bf4be5c5-1413-4e35-b017-e8534fcd3693.jpg\",\"localPath\":\"bf4be5c5-1413-4e35-b017-e8534fcd3693.jpg\",\"path\":\"\",\"date\":\"2021-09-24 16:54:17\"}]}]}","isDefault":false,"createTime":"","updateTime":""
}

Dom4j解析kml (字符串,文件两种方式)相关推荐

  1. java 接收json 字符串_spring接收json字符串的两种方式

    一.前言 前几天遇到一个问题,前端H5调用我的springboot一个接口(post方式,@RequestParameter接收参数),传入的参数接收不到.自己测试接口时使用postman的form- ...

  2. 定义字符串的两种方式

    定义字符串的两种方式 数组定义 char name[] = "answer" 指针定义 char *name = "answer" 比较 字符数组里的字符可以修 ...

  3. C语言中存储多个字符串的两种方式

    C语言中存储多个字符串的两种方式 方式一 二维字符串数组 声明: char name[4][10] = { "Justinian", "Momo", " ...

  4. c语言向文件中写入字符串_C语言中定义字符串的两种方式及其比较

    先看如下代码: 以上用两种方式定义一个字符串: 1.定义一个char * 类型指针,指向字符串首字符首地址. 2.定义一个数组,数组里存放元素为字符串各个字符+'0',其中'0'为码0值,编译器会自动 ...

  5. json解析详解 java_Java解析Json数据的两种方式详解

    JSON数据解析的有点在于他的体积小,在网络上传输的时候可以更省流量,所以使用越来越广泛,下面介绍使用JsonObject和JsonArray的两种方式解析Json数据. 使用以上两种方式解析json ...

  6. Python字符串的两种方式——百分号方式,format的方式

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  7. JS 下载文件两种方式总结

    后端返回Blob对象(文件流),完成导出.下载功能: 1.介绍Blob Blob Blob 对象表示一个不可变.原始数据的类文件对象.它的数据可以按文本或二进制的格式进行读取,也可以转换成 Reada ...

  8. Java通过图片url地址获取图片base64位字符串的两种方式

    工作中遇到通过图片的url获取图片base64位的需求.一开始是用网上的方法,通过工具类Toolkit,虽然实现的代码比较简短,不过偶尔会遇到图片转成base64位不正确的情况,至今不知道为啥. 之后 ...

  9. Android 天气预报【解析XML / Json文件(2种方式:手动解析、Gson库解析)】

    源码 [工程文件]:https://gitee.com/lwx001/Weather XML : activity_main.xml : <RelativeLayout xmlns:androi ...

最新文章

  1. python下载付费文档教程-付费?是不可能的!处理 PDF 只需几行代码,彻底解放双手!...
  2. 【C++ 语言】容器 ( queue 队列 | stack 栈 | priority_queue 优先级队列 | set 集合 | 容器遍历 | map )
  3. 小手取红色球C语言程序,C语言程序设计例精编.doc
  4. SAP Cloud for Customer(C4C)和微软Outlook的集成
  5. Java反射设置list的属性值_利用java反射比较两个实体有哪些属性值不一样
  6. 2019.03.17 14:58
  7. ibm服务器更换主板怎么恢复系统,记号一次更换IBM X3650M4主板后RAID无法启动的解决...
  8. plsql 自动查询最后页_一次SQL查询优化思考过程(900W+数据,从17s到300ms)
  9. 积分竞猜网php源码_贵州省网络安全知识竞赛个人赛Writeup
  10. linux第三课:一些注意点
  11. 如何编译Linux内核
  12. 请求过程中,需要证书认证,这种情况下如何处理
  13. 程序员的职业素养---转载
  14. android自动完成输入框,Android——自动完成输入框提示功能的菜单_AutoCompleteTextView...
  15. javaweb开发后端常用技术_Java web开发需要学习哪些技术?
  16. MATLAB 去除图例legend外边框
  17. 富士施乐Fuji Xerox ApeosPort-IV 2060 驱动
  18. imageAI基本使用
  19. 在scrapy里使用cookie获取美团外卖的数据
  20. 《Flutter入门疑难杂症》imagepicker ImagePicker().getVideo()返回.jpg

热门文章

  1. 把Github用作Pypi Server
  2. 必读:劳动合同电子化将带来怎样的变化?
  3. 当小数遇上二进制——全面解析JS中的小数二进制计算(附赠0.1+0.2 !== 0.3问题解释)
  4. 传智播客Java面试宝典 | 张老师尽心整理的面试宝典大全,面试阿里腾讯不成问题。西边人西说测试
  5. Spring boot 提示“Whitelabel Error Page”
  6. linux3.0操作系统下载,linux操作系统下载
  7. 微型计算机中常提及到,2018年自考《计算机应用基础》精选习题二
  8. 「网工必备」五款工作学习必备软件免费下载
  9. 美国的那些非主流博物馆
  10. angularjs上传文件到服务器,AngularJS - 上传文件( Upload File)