2011-12-14 4 views
0

300MB XML 파일을 읽는 데 XSLT를 사용하고 있습니다. 일부 태그 내용을 검사해야하고 다른 태그 요소를 출력으로 인쇄해야합니다.XML을 읽는 더 빠른 방법은 무엇입니까?

그것은 아주 긴 시간 (10 분)와 결국은 '살해'와 다른 출력 진술이 종료하고있다.

더 빠른 방법은 무엇입니까? 자바에서 SAX 파서를 사용하여 읽을 수 있습니까? 미리 감사드립니다.

+0

설명 요청 : xml 파일을 "읽음"이란 무엇을 의미합니까? 당신이 달성하고자하는 목표는 무엇입니까? – Daryn

+0

여기 읽는 것은 내가 어떤 태그 내용 등을 확인해야 의미 당신이 태그를 찾기 위해 전체 파일을 읽을 필요가 있기 때문에 내가 출력 – anand

+0

XML 파일과 같은 다른 태그 요소를 인쇄해야 즉, 첫 번째 장소에서 그렇게 큰 안된다 기반으로. 그리고 뭔가를 변경해야한다면 전체 파일을 다시 작성해야합니다. 300MB를 처리하는 데 얼마나 걸리나요? –

답변

3

첫 번째 단계는 시간이 XML 구문 분석기 또는 XSLT 프로세서에서 사용되었는지 여부를 확인하는 것입니다. (a) 아무것도 수행하지 않는 변환 (<xsl:template match="/"/>) 및 (b) 모든 내용을 복사하는 변환 (<xsl:template match="/"><xsl:copy-of select="."/></xsl:template>) 및 결과를 실제 변환과 비교하십시오.

XSLT 프로세서는 많이 변화 할 모든 가능한에서, 당신은 몇 가지 시도해야합니다. XSLT 프로세서를 사용하는 다른 방법을 실험해볼 필요가 있습니다. 예를 들어 DOM을 사용하는 것보다 훨씬 효율적인 내부 트리 모델이있는 경우도 있습니다. 따라서 여기에서 프로세서의 세부 사항과 사용 방법을 다시 확인하십시오.

마지막으로, "긴 시간"은 우리에게 아무것도 알 수 없습니다. 실제로 소요되는 시간을 알려주십시오. 합리적인 것이 든 어딘가에서 잘못된 것이 있는지 여부를 알려줄 수 있습니다.

+0

좋은 XSLT 프로세서는 상태 머신 내에서 역 참조가 필요 없기 때문에 모든 것을 그대로 복사하므로 아무 것도하지 않는 것과는 대조되지 않습니다. –

+0

10 분 이상 걸리고 결국 '죽임을 당했다'고 말합니다. 다른 출력물이 나오지 않습니다 : ( – anand

+0

@anand : 미래에는 이러한 종류의 정보로 질문을 업데이트하십시오. 사람들이 모든 그림을 읽으려면 주석을 읽지 마십시오 .-) 행운을 빈다. – shellter

1

XSLT 스타일 시트는 정규 표현식과 같은 방식으로 Statemachine으로 변환 될 수 있습니다 (XSLT를 다루는 일부 라이브러리는 "컴파일"옵션을 가지고 있기 때문에 비용 대비 효과를 결정할 수 있습니다) 그렇게했다).

이렇게하면 매우 빠릅니다. 스타일 시트의 성질은 이것에 영향을 미칠 것입니다. 템플리트 매칭이 모든 것이 순방향 전용으로 수행 될 수있는 경우 (또는 내부적으로 다시 작성 될 수있는 경우), 문서에서 많은 단계를 다시 수행해야하는 경우보다 훨씬 빠릅니다 .

심지어 최고의 구현하지만 아마 앞으로 만 (여부 SAX 나 풀 같은 푸시)이 XML의 구문 분석과 최적의 구현보다 느리게 될 것입니다. 그러나 XSLT 접근 방식과 마찬가지로 전방 전용 파서가 이전에 발생한 요소에 대해 많은 상태를 유지해야만 이전 요소를 참조하는 방식으로 일부 요소에 응답 할 수있는 경우 상황이 느려질 수 있습니다 상당히. 결과적으로 DOM 접근법 (전체 문서 또는 하위 트리)이 속도면에서 비교 가능 해지고 (이전에 발생한 요소를 참조하는 것이 DOM이 가장 쉽게 만드는 부분이기 때문에) 당신은 그들이이 적은, 당신은 더 큰 이익을 얻을 수 있습니다 않도록 "최대"또는 "뒤로"문서의 참조 부분을 재 작성하는 방법을 볼 수있는 경우

는 따라서 어느 접근 방식은, 촬영됩니다.

관련 문제