我将通过以下单独的.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";
}
正如我在评论中提到的,我想找到一种方法或改变我的实现,以便我可以在main方法中获得字符串“Hello”。在上面的实现中,问题在于SAXHandler的startELement和endELement方法的返回类型。是否有任何变通方法或设计变更,以便我可以达到预期的效果? 我希望我的问题很明确。
由于
答案 0 :(得分:1)
它背后的一般性问题似乎是:解析器如何根据读取内容构建一些数据结构。
在您的情况下,您可以将数据(即“Hello”)存储在SaxHandler的私有字段中。您还可以向SaxHandler添加一个getter,即String getData()
。然后,方法parseXml可以用
return handler.getData();
答案 1 :(得分:0)
在SaxHandler的构造函数中,您可以获得对Parser对象的引用,并在Parser中调用所需的方法来处理您想要的字符串。
在startElement
的中间返回是不正确的,因为它会停止整个解析过程。因此,DefaultHandler中的所有方法都是void
。