blob: de109077e6024e69fdbf2700ac1d192c682847d0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2010 Soyatec (http://www.soyatec.com) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Soyatec - initial API and implementation
*******************************************************************************/
package org.eclipse.xwt.internal.xml;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.helpers.DefaultHandler;
/**
* @author jliu jin.liu@soyatec.com
*/
public class XDataHandler extends DefaultHandler implements ContentHandler {
private boolean namespaceBegin = false;
private String currentNamespace;
private String currentNamespaceUri;
private StringBuilder out;
private boolean started;
public XDataHandler(StringBuilder out) {
this.out = out;
}
public void startPrefixMapping(String prefix, String uri) {
namespaceBegin = true;
currentNamespace = prefix;
currentNamespaceUri = uri;
}
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) {
if (started) {
out.append("<" + qName);
if (namespaceBegin) {
out.append(" xmlns:" + currentNamespace + "=\"" + currentNamespaceUri + "\"");
namespaceBegin = false;
}
for (int i = 0; i < atts.getLength(); i++) {
out.append(" " + atts.getQName(i) + "=\"" + atts.getValue(i) + "\"");
}
out.append(">");
}
if (localName.equalsIgnoreCase("xdata")) {
started = true;
}
}
public void endElement(String namespaceURI, String localName, String qName) {
if (localName.equalsIgnoreCase("xdata")) {
started = false;
}
if (started) {
out.append("</" + qName + ">");
}
}
public void characters(char[] ch, int start, int length) {
if (started) {
for (int i = start; i < start + length; i++) {
out.append(ch[i]);
}
}
}
public void ignorableWhitespace(char[] ch, int start, int length) {
if (started) {
for (int i = start; i < start + length; i++) {
out.append(ch[i]);
}
}
}
public void processingInstruction(String target, String data) {
if (started) {
out.append("<?" + target + " " + data + "?>");
}
}
public void skippedEntity(String name) {
if (started) {
out.append("&" + name + ";");
}
}
}