不多说,直接看代码:
public class MainTest {
/**
* @param args
*/
public static void main(String[] args) {
List dataList = null;
SAXReader reader = new SAXReader();
Document doc = null;
try {
doc = reader.read(new FileInputStream("e:/gg.kml"));
} catch (DocumentException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Element root = doc.getRootElement();
// System.out.println("获取到的根元素: " + root.getName());
// root.accept(new MVisitor());
@SuppressWarnings("unchecked")
List attrChildList = root.elements();
// Document层
for (Element rootE : attrChildList) {
// System.out.println(rootE.getName());// Document
dataList = new ArrayList();
List list = rootE.elements();
for (Element documentE: list) {
// System.out.println(documentE.getName());// Folder
FolderBean folderBean = null;
List pkList = null;
if(documentE.getName() == "Folder"){
folderBean = new FolderBean();
pkList = new ArrayList();
List folderList = documentE.elements();// element个数!!!
// Folder层
for (Element folderE: folderList) {
// System.out.println(folderE.getName());
// System.out.println(folderE.getName()+" - "+folderE.getText());// Folder下
if(folderE.getName() == "description"){
folderBean.setDescription(folderE.getText());
}
PlacemarkEntity placemarkEntity = null;
// TODO 封装成对象
if(folderE.getName() == "Placemark"){
placemarkEntity = new PlacemarkEntity();
// Placemark层
List placemarkList = folderE.elements();
for (Element placemarE: placemarkList) {
// System.out.println(placemarE.getName());
// System.out.println(placemarE.getName()+" - "+placemarE.getText());
if(placemarE.getName() == "description"){
// System.out.println(placemarE.getText());
placemarkEntity.setDescription(placemarE.getText());
}
if(placemarE.getName() == "styleUrl"){
// System.out.println(placemarE.getText());
placemarkEntity.setStyleUrl(placemarE.getText());
}
// log:Point层-点
if(placemarE.getName() == "Point"){
// System.out.println(placemarE.getName());
// System.out.println(placemarE.elementText("coordinates"));
placemarkEntity.setCoordinates(placemarE.elementText("coordinates"));
}
// log:Polygon层-面
if(placemarE.getName() == "Polygon"){
// System.out.println(placemarE.getName());
List polygonList = placemarE.elements();
for (Element polygonE: polygonList) {
// System.out.println(polygonE.getName());
if(polygonE.getName() == "outerBoundaryIs"){
List outerBoundaryIsList = polygonE.elements();
for (Element outerBoundaryIsE: outerBoundaryIsList) {
// System.out.println(outerBoundaryIsE.getName());
// System.out.println(outerBoundaryIsE.elementText("coordinates"));
placemarkEntity.setCoordinates(outerBoundaryIsE.elementText("coordinates"));
}
}
}
}
// log:Polygon层-线
if(placemarE.getName() == "LineString"){
// System.out.println(placemarE.getName());
// System.out.print(placemarE.elementText("coordinates"));
placemarkEntity.setCoordinates(placemarE.elementText("coordinates"));
}
}
pkList.add(placemarkEntity);
}
folderBean.setPlacemarkList(pkList);
}
}
dataList.add(folderBean);
}
}
//下面是测试代码,看是否能正常解析
// System.out.println(""+dataList.size());
for(int i= 0;i < dataList.size(); i++){
String desc = dataList.get(i).getDescription();
System.out.println(desc);
// System.out.println(dataList.get(i).getPlacemarkList().size());
List list = dataList.get(i).getPlacemarkList();
for(PlacemarkEntity p : list){
System.out.println(p.getDescription()+"/"+p.getCoordinates());
}
}
}
}
其中用到的dom4j的jar包需要到官网上进行下载,代码中用的到的比较多的几个Api方法:
List attrChildList = root.elements();
获取这个几点下的所有子节点,返回一个集合
element.getName()
获取节点名称
element.elementText("xxx")
获取当前节点的数据
还有一个方法Iterator it = element.elementIterator();返回的是一个迭代,接下来可以用while循环进行迭代取值:
while (palIt.hasNext()){
Element palElement = (Element) palIt.next();
System.out.println(palElement.getName()+" - "+palElement.getText());
}
这种方式没办法判断具体哪个节点的名称是什么。