Java 응용 프로그램에서 사용자 지정 XML 구성 파일을 구문 분석하고 있습니다. 주로 라인 번호가있는 구성에서 오류를보고해야하기 때문에 SAX 파서를 사용하려고합니다.Java에서 SAX 구문 분석의 요소 내용 건너 뛰기
가 온라인 핸들러 클래스를 구현, 사물이 정상 처리를 위해 매우 간단 보일의 코드 샘플 많이 있습니다 - 예를 들어이
하지만 내 경우에는 http://tutorials.jenkov.com/java-xml/sax-example.html, 때로는 내가 아래에 전체 트리를 건너 뛸 필요 요소 :
<sampledocument>
<sampletag>
<process/>
<these/>
<tags/>
</sampletag>
<sampletag skip="yes">
<do_not>
<process/>
<these/>
<tags/>
</sampletag>
<sampledocument>
추가 추가 : 또한 런타임시 건너 뛸지 여부 만 알 수 있습니다. 다소 인위적인 예제에서는 <sampletag>
에서 태그를 처리하기 위해 파일을 열 필요하고, 파일을 찾을 수없는 경우,이를 처리하지 : 물론
<sampledocument>
<sampletag file="file1">
<process/>
<these/>
<tags/>
<if_file1_exists/>
</sampletag>
<sampletag file="file2">
<process/>
<these/>
<tags/>
<if_file2_exists/>
</sampletag>
<sampledocument>
, 방금 핸들러에 건너 뛰는 추적 할 수 있습니다 코드,하지만 이것은 조금 어색합니다. 어떻게 든이 요소의 내용을 건너 뛰기 위해 startElement() 메서드에서 SAX를 말할 수 있습니까?
감사! 그러나 ContentHandler에서 단순히 skipDepth를 유지하는 것과 다른 점은 무엇입니까? 내 실제 작업에서 ContentHandler는 실제로 트리를 건너 뛸지 여부를 결정하기 전에 요소를 처리해야하므로 별도의 필터가 있으면 ContentHandler가 건너 뛸 수 있도록해야합니다. –
SAX 코드는 항상 파이프 라인으로 작성하는 것이 가장 좋습니다. 하나의 단계는 각 분리 가능한 작업마다 파이프 라인에 작성됩니다. 그렇지 않으면 ContentHandler에 스파게티 코드가 생기게됩니다 (이미 "조금 어색했다"). 제대로 구축 된 파이프 라인을 사용하면 유지 보수가 가능하고 재사용이 가능한 코드를 쉽게 수정하고 디버깅 할 수 있습니다. ContentHandler에 모든 것을 넣으면 유지 보수가 불가능 해집니다. 물론, 당신의 예제가 실제 태스크와 다른 경우 실제 태스크에서 기능을 분해하는 방법을 조언 할 수는 없습니다. –
런타임에 파일을 테스트하기 위해 예제를 수정했습니다. 실제 코드는 구성의 정확성을 확인하고 매우 오랜 질문을하는 방식을 설명하지만 별도의 클래스에 대한 호출이므로 파일을 확인하는 것과 다소 비슷합니다. –