App下載
首頁javasaxJava HTML/XML - 如何擴展DefaultHandler并使用XML定位器來指示當前的解析器位置

Java HTML/XML - 如何擴展DefaultHandler并使用XML定位器來指示當前的解析器位置

我們想知道如何擴展DefaultHandler并使用XML定位器來指示當前的解析器位置。
import java.io.StringReader;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class Main {
  public static String getXMLData() {
    return "<x></x>";
  }

  public static void main(String[] args) throws Exception {
    SAXParserFactory factory = SAXParserFactory.newInstance();
    factory.setValidating(true);
    SAXParser parser = factory.newSAXParser();
    parser.parse(new InputSource(new StringReader(getXMLData())),
        new SampleOfXmlLocator());
  }
}

class SampleOfXmlLocator extends DefaultHandler {
  private Locator locator;

  public void setDocumentLocator(Locator locator) {
    this.locator = locator;
  }

  public void startElement(String uri, String localName, String qName,
      Attributes attrs) throws SAXException {
    if (qName.equals("order")) {
      System.out.println("here process element start");
    } else {
      String location = "";
      if (locator != null) {
        location = locator.getSystemId(); // XML-document name;
        location += " line " + locator.getLineNumber();
        location += ", column " + locator.getColumnNumber();
        location += ": ";
      }
      throw new SAXException(location + "Illegal element");
    }
  }

}