2012-01-21 3 views
3

나는 하루 종일 반복적으로 기존 XML 파일에 노드를 추가해야하는 응용 프로그램을 작성하고 있습니다. 저는 여기에 추가하려고 노드 목록의 샘플입니다안드로이드에서 XML 파일에 반복적으로 쓰는 가장 효율적인 방법은 무엇입니까?

<gx:Track> 
     <when>2012-01-21T14:37:18Z</when> 
     <gx:coord>-0.12345 52.12345 274.700</gx:coord> 
     <when>2012-01-21T14:38:18Z</when> 
     <gx:coord>-0.12346 52.12346 274.700</gx:coord> 
     <when>2012-01-21T14:39:18Z</when> 
     <gx:coord>-0.12347 52.12347 274.700</gx:coord> 
     .... 

이 여러 번까지 일어날 수는 오랜 시간에 두 번째 내가 무엇을 가장 또는 가장 효율적인 방법을 알고 싶습니다 이렇게하는거야.

다음은 지금 당장하고있는 작업입니다. DocumentBuilderFactory를 사용하여 XML 파일을 구문 분석하고 컨테이너 노드를 찾은 다음 하위 노드를 추가 한 다음 TransformerFactory를 사용하여 SD 카드에 다시 씁니다. 그러나 파일이 커질수록 점점 더 많은 시간이 걸리는 것으로 나타났습니다.

나는 더 좋은 방법을 생각하려고 노력했는데 이것이 내가 생각할 수있는 유일한 것입니다 : 파일을로드하고 .seek()를 파일의 특정 위치에 사용하려면 RandomAccessFile을 사용하십시오. 내가 파일의 길이를 기반으로 위치를 계산하고 '내가 무엇을 추가'내가 뭘하고 후 파일의 길이를 뺍니다.

나는이 방법이 효과적 일 것이라고 확신하지만 DocumentBuilderFactory 사용의 용이함과는 조금 다른 느낌을 준다.

더 좋은 방법이 있나요?

+4

xml 파일 대신 sqlite를 사용 하시겠습니까? – Peterdk

+1

데이터베이스가 이런 종류의 문제에 적합한 해결책으로 보일 것입니다. 필요한 경우 XML 파일로 변환 할 수 있습니다. –

+0

불행히도 SD 카드에는 항상 XML 파일이 있어야합니다. 변경 불가능한 요구 사항입니다. – Mendhak

답변

1

JAXB를 사용해보십시오. Java 1.6 JDK의 대부분에 들어있는 Java XML Binding 라이브러리입니다. JAXB를 사용하면 XML 스키마 정의 파일을 지정할 수 있으며 DTD를 실험적으로 지원할 수 있습니다. 그런 다음 라이브러리는 XML 문서로 다시 변환되는 코드에서 사용할 수 있도록 Java 클래스를 컴파일합니다.

검증을위한 옵션 지원을 통해 매우 빠르고 유용합니다. This은 좋은 출발점이 될 것입니다. This을 살펴 보는 것도 좋은 방법입니다. Eclipse에는 Java 클래스를 생성하고 XSD 작성을위한 멋진 GUI 도구를 제공하는 데 유용한 도구가있다. 이클립스 플러그인은 Davi라고 불리우며 나는 믿는다.

+0

이 라이브러리를 가리켜 주셔서 감사합니다. 사용하겠습니다. – Mendhak

관련 문제