2013-08-26 2 views
0

SAX 파서를 사용하여 XML 파일을 구문 분석하고 데이터를 파서의 endDocument 메서드 내 일부 arraylists-hashmaps에 저장합니다. 구문 분석이 끝난 후에도 내 참조가 모두 사라지고 내 주요 메서드에서 액세스하려고하면 arraylist-hashmap size()가 생깁니다. 즉, 구문 분석 후 데이터 을 저장하지만 색소 - 파싱 중에 만 인쇄 할 수 있습니다. 파싱이 완료된 후 다시 사용하기 위해 어떻게 저장 할 수 있습니까? 필요한 정보가 들어있는 객체 목록을 만들려고했으나 작동하지 않았습니다.SAX 파싱 후 데이터를 저장하는 방법

처리기 코드 :

public class MyHandler extends DefaultHandler { 
private List<String> Rules = new ArrayList<String>(); 


public MyHandler() {acc = new StringBuilder();} 
public void startDocument(){ 

     String startDocumentString="Parsing started ----- Discovered Rules :";    
     System.out.println(startDocumentString);} 

public void endDocument(){   
     String endDocumentString="\n \nParsing ended ------";    
     System.out.println(endDocumentString); 
for(int i=0 ; i< rulesNumber ; i++){ 
setRules(Result[(0+(3*i))]); 
System.out.println("Assosiative Rule " + (i+1) +": "+ Result[(0+(3*i))]);} 

public void startElement(String nameSpaceURI, String localName, String qName, Attributes atts) { 
if(qName.equals("AssociationRule")) { 
setRulesNumber();} 

public void endElement(String nameSpaceURI,String localName, String qName) { 
(acc.toString()).trim(); 
    System.out.print(acc.toString()); 
    Results.add(acc.toString());   

    acc.setLength(0); 
    unsetDecision(); 
    }   

public void characters (char[] ch, int start , int length) { 
    if(decision) 
    acc.append(ch, start, length);   
    } 


public void setRules(String s){Rules.add(s);} 

public List<String> getRules(){return Rules;} 
+0

클래스에 대한 언 마샬링을 수행 중이십니까? –

+0

아니요, 저는 DefaultHandler를 확장하는 Handler를 사용하며, startDocument, endDocument, startElement, endElement 및 Characters 메소드를 재정의합니다. –

+0

모든 재정의 된 메서드에 대한 코드가 필요합니다. 그러면 누구라도 당신을 도울 수 있습니다. –

답변

0

당신은 당신의 ContentHandler 예에 대한 참조를 유지해야

//keep a reference to MyHandler 
MyHandler handler = new MyHandler(); 

XMLReader parser = XMLReaderFactory.createXMLReader(); 

parser.setContentHandler(handler); 

parser.parse(mySource); 

//get your results 
List<String> rules = handler.getRules(); 
+0

감사합니다. 정상적으로 작동했습니다. MyHandler 클래스에서 구문 분석 메서드를 만들었습니다.이 메서드는 매개 변수가있는 xml 파일 이름 만 사용하여 내 주 메서드에서 호출했습니다. 내 기본 방법에 3 줄을 추가 할 것입니다. –

+0

@PantelisIeronimakis 안녕하세요. 같은 문제에 직면했을 때 데이터 저장 방법에 대한 해결책을 알려주세요. 3 년 후에는 기억하기가 어렵습니다. :) – limonik

관련 문제