2009-07-16 4 views

답변

7

자신의 라이브러리를 만들지 만 코드를 작성하지 않아도됩니다.

나는 http://code.google.com/apis/kml/documentation/kmlreference.html을 제안합니다. 거기에서 XML Schema을 얻을 수 있습니다. 스키마를 얻었 으면 JAXB을 사용하여 KML을 쉽게 파싱하고 쓰는 객체 트리를 생성 할 수 있습니다.

This may also be a good resource 다른 누군가가 이미 완료 한 것처럼 보입니다.

+1

약간의 연습을 위해이 길을갔습니다. 스키마가 컴파일러를 통해 실행될 때 충돌하는 몇 가지 요소가 있다는 점에서 약간의 문제가 있습니다. 주요한 것은 없지만 몇 가지 맞춤 바인딩을 작성할 준비가되어 있어야합니다. – CurtainDog

1

는 XML 당신이 라이브러리뿐만 아니라 유망 보인다 ++

1

여기 내 JSOUP 구현이가 KML 데이터를 처리하는 경우에 정말 잘

public ArrayList<ArrayList<LatLng>> getCoordinateArrays() { 
    ArrayList<ArrayList<LatLng>> allTracks = new ArrayList<ArrayList<LatLng>>(); 

    try { 
     StringBuilder buf = new StringBuilder(); 
     InputStream json = MyApplication.getInstance().getAssets().open("track.kml"); 
     BufferedReader in = new BufferedReader(new InputStreamReader(json)); 
     String str; 
         String buffer; 
     while ((str = in.readLine()) != null) { 
      buf.append(str); 
     } 

     in.close(); 
     String html = buf.toString(); 
     Document doc = Jsoup.parse(html, "", Parser.xmlParser()); 
     ArrayList<String> tracksString = new ArrayList<String>(); 
     for (Element e : doc.select("coordinates")) { 
      tracksString.add(e.toString().replace("<coordinates>", "").replace("</coordinates>", "")); 
     } 

     for (int i = 0; i < tracksString.size(); i++) { 
      ArrayList<LatLng> oneTrack = new ArrayList<LatLng>(); 
      ArrayList<String> oneTrackString = new ArrayList<String>(Arrays.asList(tracksString.get(i).split("\\s+"))); 
      for (int k = 1; k < oneTrackString.size(); k++) { 
       LatLng latLng = new LatLng(Double.parseDouble(oneTrackString.get(k).split(",")[0]), 
         Double.parseDouble(oneTrackString.get(k).split(",")[1])); 
       oneTrack.add(latLng); 
      } 
      allTracks.add(oneTrack); 
     }} 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return allTracks; 
} 
0

당신은 여러 선택() 메서드 호출을 할 수 있습니다 안드로이드 스튜디오 :

dependencies { 
    compile 'org.jsoup:jsoup:1.8.1' 
} 


     // find a way to read the file and store it in a string 

     String inputFileContents = ""; 
     String xmlContent = inputFileContents; 
     Document doc = Jsoup.parse(xml, "", Parser.xmlParser()); 

     for(Element e : doc.select("LineString").select("coordinates")) { 
      // the contents 
      System.out.println(e.text()); 
     } 

를 사용하는 경우. 나는에 코드를 단순화 :

Element e = doc.select("LineString").select("coordinates").first(); 
+0

오류 : (20, 29) java : parse (org.jsoup.nodes.Document.OutputSettings.Syntax, java.lang.String, org.jsoup.parser.Parser)에 적합한 메소드가 없습니다. method org.jsoup.Jsoup .parse (java.lang.String, java.lang.String, org.jsoup.parser.Parser) 해당 사항 없음 (인수 불일치 : org.jsoup.nodes.Document.OutputSettings.Syntax는 java.lang으로 변환 될 수 없습니다. 문자열) 메서드 – user3871754

+0

내 수입 : import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.parser.Parser; import static org.jsoup.nodes.Document.OutputSettings.Syntax.xml; – user3871754

1

이 구조를 XML 파일을 포함하는 다른 옵션은 KML 파일이 정상 파일입니다. 이 파일에서 검색을 하나 개의 특정 장소에 대한

private static void readKML(InputStream fileKML, String nameCoordinates) { 
    String column = null; 
    Boolean folder = Boolean.TRUE; 
    Boolean placemark = Boolean.FALSE; 
    Boolean placeCorrect = Boolean.FALSE; 
    BufferedReader br = new BufferedReader(new InputStreamReader(fileKML)); 
    try { 
     while ((column = br.readLine()) != null) { 
      if (folder) { 
       int ifolder = column.indexOf("<Folder>"); 
       if (ifolder != -1) { 
        folder = Boolean.FALSE; 
        placemark = Boolean.TRUE; 
        continue; 
       } 
      } 
      if (placemark) { 
       String tmpLine = nameCoordinates; 
       tmpLine = tmpLine.replaceAll("\t", ""); 
       tmpLine = tmpLine.replaceAll(" ", ""); 
       String tmpColumn = column; 
       tmpColumn = tmpColumn.replaceAll("\t", ""); 
       tmpColumn = tmpColumn.replaceAll(" ", ""); 
       int name = tmpColumn.indexOf(tmpLine); 
       if (name != -1) { 
        placemark = Boolean.FALSE; 
        placeCorrect = Boolean.TRUE; 
        continue; 
       } 
      } 
      if (placeCorrect) { 
       int coordin = column.indexOf("<coordinates>"); 
       if (coordin != -1) { 
        String tmpCoordin = column; 
        tmpCoordin = tmpCoordin.replaceAll(" ", ""); 
        tmpCoordin = tmpCoordin.replaceAll("\t", ""); 
        tmpCoordin = tmpCoordin.replaceAll("<coordinates>", ""); 
        tmpCoordin = tmpCoordin 
          .replaceAll("</coordinates>", ""); 
        String[] coo = tmpCoordin.split(","); 
        System.out.println("LONG: "+coo[0]); 
        System.out.println("LATI: "+coo[1]) 
        break; 
       } 
      } 

     } 
     br.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return cresp; 
} 
+0

여기에 세미콜론이 없습니다 : System.out.println ("LATI :"+ coo [1]) – user3871754