1. <tt id="5hhch"><source id="5hhch"></source></tt>
    1. <xmp id="5hhch"></xmp>

  2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

    <rp id="5hhch"></rp>
        <dfn id="5hhch"></dfn>

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

        時(shí)間:2020-11-09 19:20:05 XML 我要投稿

        實(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)前元素名稱(chē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 = "" ;

          }

          }

          /**

          * 文檔開(kāi)始事件

          */

          public void startDocument() throws SAXException {

          persons = new ArrayList();

          }

          /**

          * 元素開(kāi)始事件

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

          //取得事件的類(lèi)型

          int eventType = parser.getEventType();

          String eleName = null ;

          while(eventType != XmlPullParser.END_DOCUMENT){

          switch(eventType){

          //文檔開(kāi)始

          case XmlPullParser.START_DOCUMENT:

          persons = new ArrayList();

          break ;

          //元素開(kāi)始

          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)文章:

        1.Java讀取xml文件的方法

        2.Android XML文件中的@、?、@+的意義

        3.使用XQEngine來(lái)搜索XML文件內(nèi)容

        4.怎么打開(kāi)xml文件的方法和軟件

        5.解析路由器實(shí)現(xiàn)負(fù)載均衡的三種模式

        6.美國(guó)留學(xué)專(zhuān)家解析美國(guó)名校的三種方式錄取

        7.PHP中讀取大文件實(shí)現(xiàn)方法

        8.jQuery解析XML與傳統(tǒng)JavaScript方法的差別

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码

        1. <tt id="5hhch"><source id="5hhch"></source></tt>
          1. <xmp id="5hhch"></xmp>

        2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

          <rp id="5hhch"></rp>
              <dfn id="5hhch"></dfn>