jsp 解析xml

来源:互联网 发布:政府网络维护员工资 编辑:程序博客网 时间:2024/06/05 14:38
<%!
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

原创粉丝点击