2012-06-12 7 views
0

로드 된 문서를 구문 분석 : DOM4J : 색소폰 나는 다음과 같은 달성하기 위해 노력하고

  • 먼저 문서 깊이 물마루 어떤 작업을 할 JDK에서의 DefaultHandler를 사용 가서 (완료)

    1. 부하 문서를

    내가 이것을하고 싶은 이유는 이미 내 처리기가 있고, 이제 SAX 파서와 함께 사용하고 있기 때문입니다. 이제 메모리 내 문서에서 처리기를 사용하려고합니다.

    다음과 같은 방식으로 유용하다는 점에 유의하십시오. 처리기를 여러 번 사용해야합니다. 큰 문서의 경우 SAX를 사용하고 싶습니다. 작기 때문에 내부 표현을 사용하고 싶습니다.

    감사합니다.

  • 답변

    1

    이 작업을 수행하는 가장 빠른 방법 (빠른 코딩)은 SAX로 구문 분석하려는 내부 문서 부분을 내부 문자열로 작성한 다음 해당 문자열을 기반으로 StringReader을 사용하여 핸들러를 사용하는 SAX 파서.

    실제로 필요한 것은 데이터를 기반으로 SAX 이벤트를 생성하고 해당 이벤트를 처리기에 제공하는 것입니다. InputSource 또는 Reader의 형식으로 데이터를 가져온 다음 위에서 설명한 방법 인 구문 분석을 사용하거나 단순히 ContentHandler의 메소드를 직접 호출하여 SAX 이벤트를 시뮬레이션 할 수 있습니다 이미 쓰여있다. 그러나 문서를 모두 복잡하게 만들면 올바른 순서로 호출하고 필요한 데이터를 제공하여 올바른 데이터를 제공하면 고통 스러울 수 있습니다.

    Dom4J가 문서 구조의 노드를 기반으로 InputSource을 만드는 방법을 제공하면 가장 쉽게 사용할 수 있으며 먼저 문자열에 쓰는 것보다 훨씬 효율적입니다.

    실제 작업을 수행하는 ContentHandler 부분을 ContentHandler과 내부 트리를 처리하는 새 클래스에서 사용할 수있는 별도의 클래스로 추출하는 것이 좋습니다.

    +0

    그러나 이것은 매우 느릴 것입니까? – Xaero182

    +0

    얼마나 재 파싱 하느냐에 따라 느릴 수도 있습니다. 그러나 이미 파싱 했으므로 부분을 재분석하는 결정을 내리는 것이 비효율적입니다. –

    +0

    그게 사실이야. 실제로 여러 핸들러를 추가하고 병렬로 더 많은 작업을 수행 할 수 있습니다. 내가 제안한대로 ContentHandler의 일부를 추출 할 것입니다. 감사! – Xaero182