/******************************************************************************* * Copyright (c) 2004 Red Hat, Inc. * 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: * Keith Seitz <keiths@redhat.com> - initial API and implementation *******************************************************************************/ package org.eclipse.linuxtools.internal.oprofile.core.opxml; import org.xml.sax.Attributes; /** * A class which (minimally) parses XML documents. This class provides only basic * support for collecting information from XML documents. It is intended to be subclassed, * providing only common functionality for all parser classes. * @see org.eclipse.linuxtools.internal.oprofile.core.opxml.OpxmlRunner */ public class XMLProcessor { // The characters in the current tag protected String characters; /** * This method is called whenever the SAXHandler is about to invoke the * processor for the first time on a given document. * @param callData call data for the processor (usually the result is stored here) */ public void reset(Object callData) { } /** * This method is called whenever a new tag is seen in the document. By default, * this process will clear the characters collected for the tag. Processors will typically * call this baseclass method to setup for collecting new character information for a * tag. * @param name the name of the tag * @param attrs the tag's attributes * @param callData call data for the processor (usually the result is stored here) */ public void startElement(String name, Attributes attrs, Object callData) { characters = ""; //$NON-NLS-1$ } /** * This method is called whenever the closing tag for an element is seen in the * document. * @param name the element which is ending * @param callData call data for the processor (usually the result is stored here) */ public void endElement(String name, Object callData) { } /** * This method is called whenever characters are seen in the document that are not in * a markup tag. * @param chars the characters read * @param callData call data for the processor (usually the result is stored here) */ public void characters(String chars, Object callData) { characters = chars; } /** * This method is called on attribute strings and does the reverse of valid_string in * xmlfmt.cc in opxml. * @param source source attribute string * @return the source string with escaped characters translated back to their single character counterpart */ public String validString(String source) { final String chars_long[] = {"&", """, "'", "<", ">"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ final String chars[] = {"&", "\"", "'", "<", ">"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ for (int i = 0; i < chars_long.length; i++) { source.replaceAll(chars_long[i], chars[i]); } return source; } }