Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用sax解析器实现中的设计问题_Java_Design Patterns_Xml Parsing_Sax - Fatal编程技术网

Java 使用sax解析器实现中的设计问题

Java 使用sax解析器实现中的设计问题,java,design-patterns,xml-parsing,sax,Java,Design Patterns,Xml Parsing,Sax,我将通过以下单独的.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 under

我将通过以下单独的.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方法的返回类型。是否有任何变通方法或设计变更,以便我能够达到预期的结果? 我希望我的问题是清楚的


感谢

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

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

  return handler.getData();

在SaxHandler的构造函数中,可以获得对解析器对象的引用,并在解析器中调用所需的方法来处理所需的字符串

<> >在代码的中间> StistelEng/<代码>是不正确的,因为它会停止整个解析过程。因此,DefaultHandler中的所有方法都是
void