2013-03-21 3 views
0

기본 핸들러 클래스를 사용하여 해당 XML 태그를 찾을 수 있습니까? 예를 들어 ...SAX 닫는 태그 찾기

<Object class="my class"> 
    <Property> 
    <Value>1</Value> 
    </Property> 
</Object> 
<Object class="my next class"> 
    <Property> 
    <Value>1</Value> 
    </Property> 
</Object> 

는 내가하는 startElement()와하는 endElement() 메소드를 사용하고 싶지만 높은 수준에서 그것을 알아낼 수 없습니다. 내가 생각할 수있는 것은 카운터를 사용하는 것입니다. 누군가가 더 쉬운 방법을 들어 본 적이 있는지 알고 싶었습니다. 이 두 Object 클래스를 시작하고 닫을 때를 기준으로 두 개의 별도 문자열로 분할하려고합니다. 어떤 충고?

+0

이 XML을 구문 분석하기 위해 어떤 라이브러리를 사용하고 있습니까? –

+0

import javax.xml.parsers.SAXParser; –

답변

1

startElementendElement 동안 처리하기 위해 수행해야하는 기본 처리기 클래스의 하위 클래스를 만들어야합니다. Object 태그에 startElement이 호출되면 객체를 만들고 해당 객체에 대한 참조를 핸들러의 인스턴스 변수에 저장합니다. endElement이 호출되면 개체를 어딘가에 저장하고 참조를 null으로 설정합니다. 당신이합니다 (PropertyValue 태그) 다른 startElementendElement 이벤트를 수신 한편, 참조 된 개체에서 작동합니다.

두 번째 개체에 대해 반복하십시오. 마지막으로 개체의 두 인스턴스가 저장됩니다.

+0

제가 당신의 방법은 여전히 ​​작동 할 <개체 클래스 = "내 수업"><= "다른 클래스"개체 클래스>가 있다면? –

+1

@EricCallan - 중첩 된'Object' 태그가있는 경우 설명 된 메소드가 작동하지 않습니다. 그러나 사소한 변화 - 참조 스택 사용 - 기본 아이디어가 작동 할 수 있습니다. 객체에 대한'startElement' 이벤트를 받았을 때 이미 객체 참조가 있으면 새로운 객체를 만들기 전에 기존 참조를 스택에 푸시합니다. endElement 이벤트에서 스택이 비어있는 경우에만 참조를 'null'로 설정합니다. 그렇지 않으면 그것을 팝 할 때 스택에서 나오는 값으로 설정하십시오. –