加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML解析

发布时间:2020-12-16 05:42:46 所属栏目:百科 来源:网络整理
导读:1.SAX解析,解析过程中返回遇到的标签名称,到达指定标签时触发不同的方法,继承DefaultHandler实现自己的解析过程 SAX解析是java内置的解析方法 /** * @author chendong * @内容:使用SAX对 xml进行解析,需要自定义handler java自带解析工具 */ public cla

1.SAX解析,解析过程中返回遇到的标签名称,到达指定标签时触发不同的方法,继承DefaultHandler实现自己的解析过程
SAX解析是java内置的解析方法

/** * @author chendong * @内容:使用SAX对 xml进行解析,需要自定义handler java自带解析工具 */
public class NewSaxPaser {

     public static void main(String[] args) throws ParserConfigurationException,SAXException,IOException {
          SAXParserFactory f = SAXParserFactory.newInstance();
          SAXParser parser = f.newSAXParser();
          MySaxHandler h = new MySaxHandler();
          FileInputStream fis = new FileInputStream("file/stu.xml" );
          parser.parse(fis,h);
     }
}

// 自定义handler
class MySaxHandler extends DefaultHandler {

     private List<Stu> list;
     private Stu stu;
     private String tagName;

     private static void show(List<Stu> list) {
           for (Stu s : list) {
              System. out.println(s);
          }
     }

     // 文档开始
     @Override
     public void startDocument() throws SAXException {
           list = new ArrayList<>();
     }

     // 标签开始
     @Override
     public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {
           tagName = qName;
           // 判断是不是Stu标签
           if ( "stu".equals( tagName)) {
               stu = new Stu();
               // 判断是不是有属性值
               if (attributes != null && attributes.getLength() > 0) {
                    // 包含属性,加载属性
                    for ( int i = 0; i < attributes.getLength(); i++) {
                        String attrName = attributes.getQName(i);
                         if ( "id".equals(attrName)) {
                             String attrValue = attributes.getValue(i);
                              stu.setId(attrValue);
                        }
                   }
              }
          }
     }

     // 文本处
     @Override
     public void characters( char[] ch,int start,int length)
               throws SAXException {
           if ( tagName == null)
               return;
          String data = new String(ch,start,length);
           if (data == null || "".equals(data))
               return;
           if ( "name".equals( tagName)) {
               stu.setName(data);
          } else if ( "age".equals( tagName)) {
               stu.setAge(Integer. parseInt(data));
          }
     }

     // 标签结束
     @Override
     public void endElement(String uri,String qName)
               throws SAXException {
           if ( "stu".equals(qName)) {
               list.add( stu);
          }
           tagName = null;
     }

     // 文档结束
     @Override
     public void endDocument() throws SAXException {

           super.endDocument();
           show(list);
     }
}

2.pull解析,解析过程中返回定义好的数值型

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import com.march.review.Stu;
/* * 使用Pull解析完成对输入流的 xml解析 * 主要用法: //工厂 XmlPullParserFactory f = XmlPullParserFactory.newInstance(); // 解析器 XmlPullParser parser = f.newPullParser(); // 设置输入流 parser.setInput(is,"utf-8"); //获取当前标签类型 int event = parser.getEventType(); //标签名 String tag = parser.getName(); //标签属性的个数 parser.getAttributeCount() //标签属性名 parser.getAttributeName(i); //属性的值 parser.getAttributeValue(i); //标签内文本 parser.nextText(); //下一个标签类型 event =parser.next(); */
public class NewPullpPaser {

     public static void main(String[] args) throws IOException {
          FileInputStream fis = new FileInputStream("file/stu.xml" );
           Parse(fis);

     }

     //遍历xml文件
     private static List<Stu> FillList(List<Stu> list,XmlPullParser parser)
               throws XmlPullParserException,IOException {
          Stu stu = null;
           int event = parser.getEventType();
           while (event != XmlPullParser. END_DOCUMENT) {
               switch (event) {
               // 文档开始,初始化集合
               case XmlPullParser. START_DOCUMENT:
                   list = new ArrayList<>();
                    break;
               // 标签开始,判断是什么标签
               case XmlPullParser. START_TAG:
                   String tag = parser.getName();
                    if ( "stu".equals(tag)) {
                        stu = new Stu();
                         // 判断是否含有属性
                         if (parser.getAttributeCount() > 0) {
                              for ( int i = 0; i < parser.getAttributeCount(); i++) {

                                  String attriName = parser.getAttributeName(i);
                                   if ("id".equals(attriName)) {
                                      String attriValue = parser.getAttributeValue(i);
                                       stu.setId(attriValue);
                                  }
                             }
                        }
                   } else if ( "name".equals(tag)) {
                        stu.setName(parser.nextText());
                   } else if ( "age".equals(tag)) {
                        stu.setAge(Integer. parseInt(parser.nextText()));
                   }
                    break;
               // 标签结束,添加到集合中
               case XmlPullParser. END_TAG:
                    if ( "stu".equals(parser.getName()))
                        list.add(stu);
                    break;
              }
              event = parser.next();
          }
           return list;
     }

     private static void show(List<Stu> list) {
           for (Stu s : list) {
              System. out.println(s);
          }
     }

     //设置输入流
     public static List<Stu> Parse(InputStream is) throws IOException {
          List<Stu> list = null;
          XmlPullParserFactory f;
           try {
               // 工厂
              f = XmlPullParserFactory. newInstance();
               // 解析器
              XmlPullParser parser = f.newPullParser();
               // 设置输入流
              parser.setInput(is,"utf-8");
              list = FillList(list,parser);
               show(list);
          } catch (XmlPullParserException e) {
               // TODO Auto-generated catch block
              e.printStackTrace();
          }

           return list;

     }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读