saxhandler.java
来自「数据仓库展示程序」· Java 代码 · 共 260 行
JAVA
260 行
/*
// $Id: //open/mondrian/src/main/mondrian/util/SAXHandler.java#4 $
// This software is subject to the terms of the Common Public License
// Agreement, available at the following URL:
// http://www.opensource.org/licenses/cpl.html.
// Copyright (C) 2003-2005 Julian Hyde
// All Rights Reserved.
// You must accept the terms of that agreement to use this software.
//
// jhyde, May 2, 2003
*/
package mondrian.util;
import mondrian.olap.Util;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import java.util.Stack;
/**
* Wrapper around a {@link org.xml.sax.ContentHandler SAX content handler} which
* makes it easier to generate consistent SAX events.
*
* <p>An instance of this class on top of a {@link mondrian.util.SAXWriter} is
* a convenient way of generating an XML document.
*
* @author jhyde
* @since May 2, 2003
* @version $Id: //open/mondrian/src/main/mondrian/util/SAXHandler.java#4 $
**/
public class SAXHandler implements ContentHandler {
private final ContentHandler contentHandler;
private final Stack stack = new Stack();
static final Attributes EmptyAttributes = new Attributes() {
public int getLength() {
return 0;
}
public String getURI(int index) {
return null;
}
public String getLocalName(int index) {
return null;
}
public String getQName(int index) {
return null;
}
public String getType(int index) {
return null;
}
public String getValue(int index) {
return null;
}
public int getIndex(String uri, String localName) {
return 0;
}
public int getIndex(String qName) {
return 0;
}
public String getType(String uri, String localName) {
return null;
}
public String getType(String qName) {
return null;
}
public String getValue(String uri, String localName) {
return null;
}
public String getValue(String qName) {
return null;
}
};
public SAXHandler(ContentHandler saxHandler) {
this.contentHandler = saxHandler;
}
//
// ContentHandler methods
public void startDocument() throws SAXException {
contentHandler.startDocument();
}
public void endDocument() throws SAXException {
Util.assertTrue(stack.isEmpty());
contentHandler.endDocument();
}
public void setDocumentLocator(Locator locator) {
contentHandler.setDocumentLocator(locator);
}
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
contentHandler.startPrefixMapping(prefix, uri);
}
public void endPrefixMapping(String prefix)
throws SAXException {
contentHandler.endPrefixMapping(prefix);
}
public void startElement(String namespaceURI, String localName,
String qName, Attributes atts)
throws SAXException {
contentHandler.startElement(namespaceURI, localName, qName, atts);
}
public void endElement(String namespaceURI, String localName,
String qName)
throws SAXException {
contentHandler.endElement(namespaceURI, localName, qName);
}
public void characters(char ch[], int start, int length)
throws SAXException {
contentHandler.characters(ch, start, length);
}
public void ignorableWhitespace(char ch[], int start, int length)
throws SAXException {
contentHandler.ignorableWhitespace(ch, start, length);
}
public void processingInstruction(String target, String data)
throws SAXException {
contentHandler.processingInstruction(target, data);
}
public void skippedEntity(String name)
throws SAXException {
}
//
// Simplifying methods
public void characters(String s) throws SAXException {
contentHandler.characters(s.toCharArray(), 0, s.length());
}
public void element(String tagName, String[] attributes) throws SAXException {
startElement(tagName, attributes);
endElement();
}
public void startElement(String tagName) throws SAXException {
contentHandler.startElement(null, null, tagName, EmptyAttributes);
stack.push(tagName);
}
public void startElement(String tagName, String[] attributes) throws SAXException {
contentHandler.startElement(null, null, tagName, new StringAttributes(attributes));
stack.push(tagName);
}
public void endElement() throws SAXException {
String tagName = (String) stack.pop();
contentHandler.endElement(null, null, tagName);
}
public void completeBeforeElement(String tagName) throws SAXException {
if (stack.indexOf(tagName) == -1) {
return;
}
String currentTagName = (String) stack.peek();
while (!tagName.equals(currentTagName)) {
contentHandler.endElement(null, null, currentTagName);
stack.pop();
currentTagName = (String) stack.peek();
}
}
/**
* List of SAX attributes based upon a string array.
*/
public static class StringAttributes implements Attributes {
private final String[] strings;
public StringAttributes(String[] strings) {
this.strings = strings;
}
public int getLength() {
return strings.length / 2;
}
public String getURI(int index) {
return null;
}
public String getLocalName(int index) {
return null;
}
public String getQName(int index) {
return strings[index * 2];
}
public String getType(int index) {
return null;
}
public String getValue(int index) {
return strings[index * 2 + 1];
}
public int getIndex(String uri, String localName) {
return -1;
}
public int getIndex(String qName) {
final int count = strings.length / 2;
for (int i = 0; i < count; i++) {
String string = strings[i * 2];
if (string.equals(qName)) {
return i;
}
}
return -1;
}
public String getType(String uri, String localName) {
return null;
}
public String getType(String qName) {
return null;
}
public String getValue(String uri, String localName) {
return null;
}
public String getValue(String qName) {
final int index = getIndex(qName);
if (index < 0) {
return null;
} else {
return strings[index * 2 + 1];
}
}
}
}
// End SAXHandler.java
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?