中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      實現xml文件解析三種方式

      時間:2024-10-14 13:22:54 XML 我要投稿
      • 相關推薦

      實現xml文件解析三種方式

        1.sax方式

        復制代碼 代碼如下:

        /**

        * 使用sax解析

        */

        public class SaxParse{

        /**

        * sax解析器

        */

        private SAXParser parser;

        public SaxParse(){

        try {

        SAXParserFactory f = SAXParserFactory.newInstance();

        parser = f.newSAXParser();

        } catch (ParserConfigurationException e) {

        e.printStackTrace();

        } catch (Exception e) {

        e.printStackTrace();

        }

        }

        public ListdoParse(InputStream is) {

        try {

        XmlHandler h = new XmlHandler();

        parser.parse(is,h);

        return h.getpersons();

        } catch (Exception e) {

        e.printStackTrace();

        }

        return null;

        }

        /**

        * 處理器

        */

        class XmlHandler extends DefaultHandler{

        Listpersons = null ;

        Person person = null ;

        //當前元素名稱

        private String currEleName;

        /**

        * 文本節點觸發該方法

        */

        public void characters(char[] ch, int start, int length)throws SAXException {

        String str = new String(ch,start,length);

        //name

        if("name".equals(currEleName)){

        person.name = str ;

        }

        else if("age".equals(currEleName)){

        person.age = Integer.parseInt(str);

        }

        }

        public void endDocument() throws SAXException {

        }

        /**

        * 元素結束

        */

        public void endElement(String uri, String localName, String qName)

        throws SAXException {

        if("person".equals(localName)){

        persons.add(person);

        }

        //將當前元素置空

        else if(("name".equals(currEleName)) || ("age".equals(currEleName))){

        this.currEleName = "" ;

        }

        }

        /**

        * 文檔開始事件

        */

        public void startDocument() throws SAXException {

        persons = new ArrayList();

        }

        /**

        * 元素開始事件

        * localName:本地名

        * uri:名字空間

        * qName:限定名,前綴 + 本地名

        */

        public void startElement(String uri, String localName, String qName,

        Attributes attributes) throws SAXException {

        //實例化person對象

        if("person".equals(localName)){

        person = new Person();

        person.id = Integer.parseInt(attributes.getValue(0));

        }

        //name元素

        else if("name".equals(localName)){

        this.currEleName = "name" ;

        }

        //name元素

        else if("age".equals(localName)){

        this.currEleName = "age" ;

        }

        }

        public Listgetpersons(){

        return persons ;

        }

        }

        }

        2.dom方式

        復制代碼 代碼如下:

        /**

        * DOM解析

        */

        public class DomParse{

        //

        private DocumentBuilder builder;

        public DomParse(){

        try {

        DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();

        this.builder = f.newDocumentBuilder();

        } catch (Exception e) {

        e.printStackTrace();

        }

        }

        public ListdoParse(InputStream is) {

        Listpersons = new ArrayList();

        Person person = null ;

        try {

        Document doc = builder.parse(is);

        NodeList list = doc.getElementsByTagName("person");

        Element ele = null ;

        for(int i = 0 ; i < list.getLength() ; i ++){

        ele = (Element) list.item(i);

        person = new Person();

        person.id = Integer.parseInt(ele.getAttribute("id"));

        person.name = getSubElementTextContent(ele,"name");

        person.age = Integer.parseInt(getSubElementTextContent(ele,"age"));

        persons.add(person);

        }

        } catch (Exception e) {

        e.printStackTrace();

        }

        return persons;

        }

        /**

        * 得到指定的資源中中間的文本內容

        */

        private String getSubElementTextContent(Element ele, String tagName) {

        NodeList list = ele.getElementsByTagName(tagName);

        Element e = (Element) list.item(0);

        //得到中間的文本節點

        return e.getTextContent();

        }

        }

        3.pull方式

        復制代碼 代碼如下:

        /**

        * pull解析,拉模式,可以手動控制下一個事件是否觸發.

        */

        public class PullParse{

        public ListdoParse(InputStream is) {

        Listpersons = null ;

        Person person = null ;

        try {

        XmlPullParser parser = Xml.newPullParser();

        //設置解析數據源

        parser.setInput(is, "utf-8");

        //取得事件的類型

        int eventType = parser.getEventType();

        String eleName = null ;

        while(eventType != XmlPullParser.END_DOCUMENT){

        switch(eventType){

        //文檔開始

        case XmlPullParser.START_DOCUMENT:

        persons = new ArrayList();

        break ;

        //元素開始

        case XmlPullParser.START_TAG:

        eleName = parser.getName();

        if("person".equals(eleName)){

        person = new Person();

        person.id = Integer.parseInt(parser.getAttributeValue(0));

        }

        else if("name".equals(eleName)){

        person.name = parser.nextText();

        }

        else if("age".equals(eleName)){

        person.age = Integer.parseInt(parser.nextText());

        }

        break ;

        //標記結束

        case XmlPullParser.END_TAG:

        eleName = parser.getName();

        if("person".equals(eleName)){

        persons.add(person);

        }

        break ;

        }

        //手動激活下個事件的觸發

        eventType = parser.next();

        }

        } catch (Exception e) {

        e.printStackTrace();

        }

        return persons;

        }

        }

      【實現xml文件解析三種方式】相關文章:

      Java多線程的實現方式07-08

      php解析ini配置文件07-13

      新西蘭留學住宿的三種方式07-01

      dos實現文件夾樹目錄生成09-16

      高考后留學美國的方式解析07-24

      SAT語法考試的出題方式解析01-20

      網站優化要實現內容的聚合的方式10-01

      高爾夫三種基本握桿方式06-10

      愛爾蘭獎學金發放的三種方式08-09

      寶寶表達情感需求的三種方式08-20

      主站蜘蛛池模板: 长丰县| 无码国产一区二区色欲| 国产一区二区三区视频大全 | 波多野无码AV中文专区| 成人在线视频网站不卡| 国产在视频线精品视频二代| 明水县| 久久精品国产久精国产69| 昂仁县| 自拍视频在线观看三级| 色综合久久久久综合一本到桃花网 | 国产激情啪啪自拍视频| 精品久久精品午夜精品久久| 精品国产又大又黄又粗av| 欧美成人网视频| 国产一区二区三区av免费观看| 精品人妻一区二区三区中文久久| 国产对白刺激在线观看| 国产在线一区二区三区| 亚洲视频一区二区久久久| 日本一极品久久99精品| 日韩av一区二区三区四区av| 97国产精品麻豆性色| 望城县| 全椒县| 岢岚县| 人妻夜夜爽av性色大片| 启东市| 方山县| 亚洲二区三区在线播放| 日韩无码电影| 国产激情视频在线| 国产精品美女久久久久浪潮AVⅤ| 亚洲综合网站精品一区二区| 丰满人妻无奈张开双腿av| 亚洲最稳定资源在线观看| 久久久久亚洲AV片无码乐播| 国产精品亚洲ΑV天堂无码| 夏邑县| 视频一区二区三区中文字幕| 亚洲一道一本快点视频|