亚洲一级电影在线观看,九九精品无码专区免费,亚洲AV无码资源在线观看 ,欧美国产高清

實(shí)現(xiàn)xml文件解析三種方式

時(shí)間:2024-10-14 13:22:54 XML 我要投稿
  • 相關(guān)推薦

實(shí)現(xiàn)xml文件解析三種方式

  1.sax方式

  復(fù)制代碼 代碼如下:

  /**

  * 使用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 ;

  //當(dāng)前元素名稱

  private String currEleName;

  /**

  * 文本節(jié)點(diǎn)觸發(fā)該方法

  */

  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 {

  }

  /**

  * 元素結(jié)束

  */

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

  throws SAXException {

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

  persons.add(person);

  }

  //將當(dāng)前元素置空

  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 {

  //實(shí)例化person對(duì)象

  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方式

  復(fù)制代碼 代碼如下:

  /**

  * 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;

  }

  /**

  * 得到指定的資源中中間的文本內(nèi)容

  */

  private String getSubElementTextContent(Element ele, String tagName) {

  NodeList list = ele.getElementsByTagName(tagName);

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

  //得到中間的文本節(jié)點(diǎn)

  return e.getTextContent();

  }

  }

  3.pull方式

  復(fù)制代碼 代碼如下:

  /**

  * pull解析,拉模式,可以手動(dòng)控制下一個(gè)事件是否觸發(fā).

  */

  public class PullParse{

  public ListdoParse(InputStream is) {

  Listpersons = null ;

  Person person = null ;

  try {

  XmlPullParser parser = Xml.newPullParser();

  //設(shè)置解析數(shù)據(jù)源

  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 ;

  //標(biāo)記結(jié)束

  case XmlPullParser.END_TAG:

  eleName = parser.getName();

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

  persons.add(person);

  }

  break ;

  }

  //手動(dòng)激活下個(gè)事件的觸發(fā)

  eventType = parser.next();

  }

  } catch (Exception e) {

  e.printStackTrace();

  }

  return persons;

  }

  }

【實(shí)現(xiàn)xml文件解析三種方式】相關(guān)文章:

Java多線程的實(shí)現(xiàn)方式07-08

php解析ini配置文件07-13

新西蘭留學(xué)住宿的三種方式07-01

dos實(shí)現(xiàn)文件夾樹目錄生成09-16

高考后留學(xué)美國的方式解析07-24

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

網(wǎng)站優(yōu)化要實(shí)現(xiàn)內(nèi)容的聚合的方式10-01

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

愛爾蘭獎(jiǎng)學(xué)金發(fā)放的三種方式08-09

寶寶表達(dá)情感需求的三種方式08-20

主站蜘蛛池模板: 商都县| 中文字幕无码不卡免费视频| 国产乱码精品一区三上| 精品国产拍国产天天人 | 亚洲成年电人电影| 日本无码一区二区三区不卡免费| 无码人妻aⅴ一区二区三区有奶水| 久久久受www免费人成| 国产成人女人在线观看| 性夜影院爽黄e爽| 国产精品高潮呻吟av久久小说| 91久久大香线蕉| 亚洲国产精品成人网址天堂| 亚洲国产成人久久精品app| 国产美女91| 成人天堂资源www在线| 欧美中日韩免费观看网站| 安福县| 97久久超碰国产精品旧版| 亚洲中文字幕无码中字| 富锦市| 亚洲精品中文字幕制| 人人人妻人人澡人人爽欧美一区| 梨树县| 国产午夜精华无码网站| 国产亚洲人成在线播放| 人妻互换精品一区二区| 一区二区亚洲精品国产精华液| 久久久久久自慰出白浆| 国产精品美人久久久久久AV| 日本欧美久久久久免费播放网 | 亚洲精品岛国片在线观看| 91亚洲免费| 国产人妻精品午夜福利免费| 国产99视频精品免费视频6| 亚洲欧洲AV一区二区三区| 性欧美暴力猛交69hd| 亚洲狠狠婷婷综合久久| 国产亚洲视频免费播放| 国产精品推荐手机在线| 洛阳市|