2013-02-28 4 views
0

다음과 같이 START_ELEMENT에 해당하는 종료 태그 (END_ELEMENT)를 쉽게 찾을 수 있습니까?StAX는 해당 끝 태그를 찾으십니까?

while(reader.hasNext()){ 
     XMLEvent event = reader.nextEvent(); 

     if(event.getEventType() == XMLEvent.START_ELEMENT){ 
      StartElement startElement = event.asStartElement(); 
      System.out.println(startElement.getName().getLocalPart()); 
     } 
    } 

답변

1

최종 요소를 반환하는 쉬운 방법은 대답이 아니오입니다. SAX 파서는 이벤트 기반 파서이므로 XML 파일을 읽고 이벤트를 만듭니다. 이러한 사건을 처리하고 이러한 사건이 발생하면 기억 구조를 구축하는 것은 당신에게 달려 있습니다.

XML 구문을 메모리에 구축하는 DOM 구문 분석기를 사용해야 할 수도 있습니다. 또는 XML을 Java 객체 및 그 반대 방향으로 변환하는 xml bindig (예 : JAXB)를 사용하십시오. 내가 생각할 수있는

0

가장 쉬운 방법은 다음과 같습니다

  • 내부 깊이를 카운터가있는 StreamFilter을 만들; 그 accept 방법은 것입니다 :
    • 증가 때마다 거기 START_ELEMENT 이벤트와 END_ELEMENT 이벤트
    • 깊이가 제로
  • FilterReader에서 읽을 경우에만, 반환 true가있을 때마다 감소 특정 시작 태그가있을 때 orignal 스트림에 대한이 필터를 기반으로합니다 :

if(event.getEventType() == XMLEvent.START_ELEMENT){ 
     StartElement startElement = event.asStartElement(); 
     System.out.println(startElement.getName().getLocalPart()); 
     if (/* you want the end of this start tag */) { 
      Reader forwardToMatchingEndReader = xmlInputFactory.createFilterReader(reader, filter) 
      XMLEvent matchingEndEvent = forwardToMatchingEndReader.next(); 
     } 
    } 
관련 문제