0

我将通过以下单独的 .java 文件解释我的 SAX 解析器的设计实现。

解析器.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";
}

正如我在评论中提到的,我想找到一种方法或更改我的实现,以便我可以在 main 方法中获取字符串“Hello”。在上面的实现中,问题出在 SAXHandler 的 startELement 和 endELement 方法的返回类型上。是否有任何解决方法或设计更改,以便我可以达到预期的结果?我希望我的问题很清楚。

谢谢

4

2 回答 2

1

它背后的更普遍的问题似乎是:解析器如何从它正在读取的内容中构建一些数据结构。

在您的情况下,您可以将数据(即“Hello”)存储在 SaxHandler 的私有字段中。此外,您还添加了一个 getter,即添加String getData()到 SaxHandler。然后方法 parseXml 可以以

  return handler.getData();
于 2013-11-06T22:23:10.217 回答
0

在 SaxHandler 的构造函数中,您可以获得对 Parser 对象的引用,并在 Parser 中调用所需的方法来处理您想要的字符串。

在中间返回startElement是不正确的,因为它会停止整个解析过程。因此,DefaultHandler 中的所有方法都是void.

于 2013-11-06T22:29:50.940 回答