Java SAX:如何在主类

时间:2016-03-24 22:00:06

标签: java xml class sax

我创建了一个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方法的类,并且必须只是文件中的这一个类。

提前谢谢

1 个答案:

答案 0 :(得分:1)

DefaultHandler类根本不应包含main()方法。你使用DefaultHandler类的方式有点棘手。它包含许多旨在被覆盖的方法,因为默认情况下......它们什么都不做。

SAXParser通过顺序读取XML文件来工作。它检测何时打开或关闭XML节点,并使用DefaultHandler子类(在您的情况下为SAXHandler)来确定在打开或关闭每个节点时要执行的操作。将DefaultHandler类视为排序字典很有帮助,解析器将在读取XML时将其用作参考。

解析器检测到节点的开始标记时调用

startElement(),并在解析器检测到节点的结束标记时调用endElement()。这些方法中的每一个的参数都包含有关节点本身的信息,这些信息是从解析器传回的。您在这些方法中编写的代码告诉解析器在遇到相应的打开/关闭标记时要做什么。

您可能想要覆盖的方法是startElement()endElement(),还可能是characters()。您最有可能使用的参数是localNameqNameattributes,它们实际上是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