static class SAXParseUser extends DefaultHandler{
StringBuffer tempString = new StringBuffer();
//文档解析
public void startDocument() throws SAXException{接收文档开始的通知,SAX解析器仅调用该方法一次。
tempString.append("开始解析xml文件。。。<br/>");
}
//标签解析开始
public void startElement(String namespaceUrl,String localName,String qName,Attributes atts)
throws SAXException{ //接收元素开始的通知。该方法的参数信息如下:
//uri:名称空间URI,如果元素没有名称空间URI,如果未执行名称空间处理,则为空字符串。
//localName:本地名称(不带前缀),如果未执行命名空间处理,则为空字符串。
//qName:元素名(带有前缀),如果元素名不可用,则为空字符串。
//atts:该元素的属性。如果没有属性,则它将是空Attributes对象。在startElement返回后,此对象的值是未定义的。
tempString.append(qName);
for(int i=0;i<atts.getLength();i++){
tempString.append(atts.getQName(i)+":"+atts. getValue(i));
}
}
//标签解析结束
public void endElement(String namespaceURI,String localName,String qName) throws SAXException{
//接收元素结束的通知。该方法的参数含义与startElement()方法的参数含义一致。
tempString.append(qName);}
//字符串解析
public void characters(char[] ch,int start,int length){ //接收字符数据的通知。该方法的参数信息如下:
//ch:字符数组,来自XML文档中的字符串数据。
//start:数组中的开始位置
//length:从数组中读取的字符的个数
tempString.append((new String(ch,start, length)));
}
//文档解析结束
public void endDocument() throws SAXException {//接收文档结尾的通知,SAX解析器仅调用该方法一次,并且它将是解析期间最后调用的方法。直到解析器放弃解析直
//到解析器放弃解析 (由于不可恢复的错误)或到达输入的结尾时,该方法才会被调用。
tempString.append("解析xml文件结束!<br>");}
//得到解析结果
public StringBuffer getPrintXML(){
return tempString;
}
}
%>
l void startPrefixMapping(String prefix, String uri)方法:开始标记的前缀URI名称空间范围映射。该方法的参数信息如下:
prefix:声明的名称空间前缀。对于没有前缀的默认元素名称空间,使用空字符串。
uri:将前缀映射到的名称空间URI。
l void endPrefixMapping(String prefix)方法:结束标记的前缀URI名称空间范围的映射。
l void setDocumentLocator(Locator locator)方法:接收用来查找SAX文档事件起源的对象。如果要使用SAX解析器来提供定位器,则必须在调用ContentHandler接口中的任何其他方法之前调用该方法,为应用程序提供定位器。
l void ignorableWhitespace(char[ ] ch, int start, int length)方法:接收元素内容中可忽略的空白的通知。
l void processingInstruction(String target, String data)方法:接收处理指令的通知。
l void skippedEntity(String name)方法:接收跳过的实体的通知。
SAXParseUser继承DefaultHandler,重写了方法
<%
SAXParserFactory spf = SAXParserFactory.newInstance();
XMLReader xmlReader = null;
SAXParser saxParser=null;
SAXParseUser saxParseUser=new SAXParseUser();
try {
// 创建一个解析器SAXParser对象
saxParser = spf.newSAXParser();
// 得到SAXParser中封装的SAX XMLReader
xmlReader = saxParser.getXMLReader();
//设置解析时处理事件的对象
xmlReader.setContentHandler(saxParseUser);
//开始解析XML文件
InputSource source = new InputSource(new ByteArrayInputStream(res.getBytes("utf-8")));
xmlReader.parse(source);
}catch (Exception ex) {
out.println(ex);
}
//输出解析结果
//out.println("解析结果:"+saxParseUser.getPrintXML());
res = saxParseUser.getPrintXML().toString();
out.println(res);
%>
转载地址:http://develop.csai.cn/web/200707051558161371.htm