我创建了一个sax解析器,主类具有main方法,并使用XMLReader.setContentHandler(myCustomParserClass)
设置解析器, public class SAXHandler {
public static void Main(String args[]) {
XMLReader.setContentHandler(myCustomParserClass); }
}
class MyCustomParserClass extends DefaultHandler { ... }
是一个扩展DefaultHandler的独立类:
class SAXHandler extends DefaultHandler {
public static void main(String args[]) { ... }
public void startElement(String uri...) { }
public void endElement(String uri...) { }
但我有一个问题。它是一个赋值,条件是主类必须扩展DefaultHandler,例如:
which()
我真的不知道如何实现XMLReader,当作为解析器的类时,我将设置为内容处理程序...也是具有main方法的类,并且必须只是文件中的这一个类。
提前谢谢
答案 0 :(得分:1)
DefaultHandler类根本不应包含main()
方法。你使用DefaultHandler类的方式有点棘手。它包含许多旨在被覆盖的方法,因为默认情况下......它们什么都不做。
SAXParser通过顺序读取XML文件来工作。它检测何时打开或关闭XML节点,并使用DefaultHandler子类(在您的情况下为SAXHandler)来确定在打开或关闭每个节点时要执行的操作。将DefaultHandler类视为排序字典很有帮助,解析器将在读取XML时将其用作参考。
解析器检测到节点的开始标记时调用 startElement()
,并在解析器检测到节点的结束标记时调用endElement()
。这些方法中的每一个的参数都包含有关节点本身的信息,这些信息是从解析器传回的。您在这些方法中编写的代码告诉解析器在遇到相应的打开/关闭标记时要做什么。
您可能想要覆盖的方法是startElement()
,endElement()
,还可能是characters()
。您最有可能使用的参数是localName
,qName
和attributes
,它们实际上是Attribute
个对象的列表,其成员可以通过getIndex(int index)
可以使用getValue()
访问其值。
看一下本教程,了解我如何使用SAX;该演示是帮助我明确的: http://www.tutorialspoint.com/java_xml/java_sax_parser.htm
DefaultHandler的文档: https://docs.oracle.com/javase/7/docs/api/org/xml/sax/helpers/DefaultHandler.html