• Java 内置的读取XML方法


    URL url = new URL(urlString);
    SAXParserFactory factory = SAXParserFactory.newInstance();
    SAXParser parser = factory.newSAXParser();
    XMLReader xmlReader = parser.getXMLReader();
    //RssHandler:XML 节点读取方式实现 RssHandler rssHandler
    = new RssHandler(); xmlReader.setContentHandler(rssHandler); InputSource inputSource = new InputSource(url.openStream()); xmlReader.parse(inputSource); return rssHandler.getRssFeed();

     RssHandler 帮助类

    public class RssHandler extends DefaultHandler {
        //多个Item集合
        RSSFeed rssFeed ;
        //单个Item实例
        RssItem rssItem; 
        CurrentState currentState = CurrentState.None;
        
        public RssHandler(){}
        
        public RSSFeed getRssFeed(){
            return this.rssFeed;
        }
        
        public void startDocument()throws SAXException {
            this.rssFeed = new RSSFeed();
            this.rssItem = new RssItem();
        }
        
        public void startElement(String _URI,String localName,String qNameString,Attributes atts)throws SAXException 
        {
            if(localName.equals("channel")){
                currentState = CurrentState.None; 
            }
            else if(localName.equals("item")){
                this.rssItem = new RssItem(); 
            }
            else if(localName.equals("title")){
                currentState = CurrentState.TITLE; 
            }
            else if(localName.equals("description")){
                currentState = CurrentState.DESCRIPTION; 
            }
            else if(localName.equals("link")){
                currentState = CurrentState.LINK; 
            }
            else if(localName.equals("category")){
                currentState = CurrentState.CATEGORY; 
            }
            else if(localName.equals("pubDate")){
                currentState = CurrentState.PUBDATE; 
            } 
        }
        
        public void endElement(String _URI,String localName,String qName)throws SAXException
        {
            if(localName.equals("item")){
                this.rssFeed.addItem(this.rssItem);
            }
        }
        
        public void characters(char ch[],int start,int length)
        {
            String theString = new String(ch,start,length);
            switch (currentState) {
            case TITLE:
                this.rssItem.title(theString);
                currentState = CurrentState.None;
                break;
            case LINK:
                this.rssItem.link(theString);
                currentState = CurrentState.None;
                break;
            case DESCRIPTION:
                this.rssItem.description(theString);
                currentState = CurrentState.None;
                break;
            case CATEGORY:
                this.rssItem.category(theString);
                currentState = CurrentState.None;
                break;
            case PUBDATE:
                this.rssItem.publicDate(theString);
                currentState = CurrentState.None;
                break; 
            default:
                break;
            }
        } 
        /*
         * 节点枚举
         */
         public enum CurrentState{
            /*
             * 无
             */
            None,
            TITLE,
            LINK,
            DESCRIPTION,
            CATEGORY,
            PUBDATE 
        }
    } 
  • 相关阅读:
    mobx的一个记录
    前端模块规范AMD/UMD/CommonJs
    CSS3字体大小单位的认识px/em/rem
    各浏览器之间的字号检测
    react整理一二(初入React世界)
    Node.js中实现套接字服务
    闲来无事,把node又拾起来看看
    判断类型
    html5 搜索框
    CSS 设置placeholder属性
  • 原文地址:https://www.cnblogs.com/you000/p/2797514.html
Copyright © 2020-2023  润新知