分类: LINUX
2011-05-11 13:47:04
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
public class sample extends DefaultHandler
{
static private Writer out = null;
StringBuffer buffer =null;
//开始解析 文档
@Override
public void startDocument() throws SAXException
{
// TODO Auto-generated method stub
super.startDocument();
System.out.println("beginning to parse the XML document");
emit(" version='1.0' encoding='UTF-8'?>");
newLine();
}
//结束解析XML文档
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
System.out.println("parsing is over ......");
newLine();
try {
out.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void startElement(String uri, String sname, String qname,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, sname, qname, attributes);
echoText();
String elementName = sname ;
if (sname.equals(""))
{
elementName = qname ;
}
else
{
elementName = sname ;
System.out.println("tracking....");
}
emit("<"+elementName);
/*
* 对属性进行处理 (回显)
*/
if(attributes!=null)
{
for(int i=0;i
String attrName = attributes.getLocalName(i);
if(attrName.equals(""))
{
attrName = attributes.getQName(i);
}
emit(" ");
emit(attrName+"="+attributes.getValue(i));
}
}
emit(">");
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
String s = new String(ch , start, length);
if(buffer==null)
{
buffer=new StringBuffer(s);
}
else
{
buffer.append(s);
}
}
@Override
public void endElement(String uri, String sname, String qname)
throws SAXException
{
// TODO Auto-generated method stub
super.endElement(uri, sname, qname);
echoText();
String elemntName = sname; // element name
if ("".equals(elemntName)) {
elemntName = qname; // not namespaceAware
}
emit("" + elemntName + ">");
}
@Override
public void error(SAXParseException e) throws SAXException {
// TODO Auto-generated method stub
super.error(e);
}
/*
*
* Utility Method
*
*/
void echoText()
{
if(buffer==null)
{
return;
}
String s = buffer + "";
emit(s);
buffer = null;
}
void emit(String s)
{
try {
out.write(s);
out.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
void newLine()
{
String lineEnd = System.getProperty("line.separator");
try {
out.write(lineEnd);
out.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//---------------------------------------------------------
//---------------------------------------------------------
public static void main(String[] args) throws Exception
{
System.out.println("start........");
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
SAXParser saxParser = saxFactory.newSAXParser();
if (args.length!=1) {
System.out.println("error file xml ");
System.exit(1);
}
out = new OutputStreamWriter(System.out,"UTF-8");
saxParser.parse(args[0], new sample());
}
}