문제

다음 별도의 .java 파일을 통해 SAX 파서의 디자인 구현을 설명하겠습니다.

Parser.java

public static void main(String[] args){
   Parser myParser = new Parser();
   Parser.parseXML(inputFile);  //may not be correct call, 
                             //but using it to make things clear to understand
}


public void parseXML(File inputFile) {
    SAXParserFactory factory = SAXParserFactory.newInstance();
    try {
        SAXParser   parser = factory.newSAXParser(); 
        SaxHandler handler = new SaxHandler();
        parser.parse(inputFile, handler);
    } ....
}

Saxhandler.java

public class SaxHandler extends DefaultHandler {

public void startElement(String uri, String localName, 
                         String qName, Attributes attributes) throws SAXException{
    MyClass mine = new MyClass();
    return mine.returnString;  // I would like to have this line so that I can return               
                              //"Hello" ultimately to the main method
}

public void characters(char ch[], int start, int length) throws SAXException { 
}  

public void endElement(String uri, String localName,
                       String qName) throws SAXException {
}

myclass.java

public String returnString()
{
    return "Hello";
}

주석에서 언급했듯이 주요 방법에서 문자열 "Hello"를 얻을 수 있도록 방법을 찾거나 구현을 변경하고 싶습니다. 위의 구현에서 문제는 Saxhandler의 StartElement 및 Endlement 방법의 반환 유형에 관한 것입니다. 원하는 결과를 얻을 수 있도록 해결 방법 또는 설계 변경 사항이 있습니까? 내 질문이 분명하기를 바랍니다.

감사

도움이 되었습니까?

해결책

더 일반적인 질문은 다음과 같습니다. 파서가 어떻게 데이터 구조를 읽고있는 것부터 일부 데이터 구조를 구축 할 수 있습니까?

귀하의 경우 데이터 (예 : "Hello")를 Saxhandler의 개인 분야에 저장할 수 있습니다. 또한 당신은 getter를 추가합니다 String getData() 색소폰에. 그런 다음 parsexml 방법이 끝날 수 있습니다

  return handler.getData();

다른 팁

색소폰 핸들러의 생성자에서 파서 객체에 대한 참조를 얻고 원하는 문자열을 처리 할 파서에서 원하는 방법을 호출 할 수 있습니다.

한가운데서 돌아옵니다 startElement 전체 구문 분석 프로세스를 중지하기 때문에 정확하지 않습니다. 따라서 Defaulthandler의 모든 방법은 다음과 같습니다 void.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top