国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Java中解析XML的方式有哪些

清淺
發(fā)布: 2019-04-15 13:06:01
原創(chuàng)
7160人瀏覽過

java解析XML的方式有使用DOM解析通過DOM對(duì)象以樹狀結(jié)構(gòu)連接在一起;使用SAX 解析它是遇到不同元素時(shí)會(huì)逐行解析;使用StAX解析會(huì)從XML中提取所需的數(shù)據(jù)

XML是一種通用的數(shù)據(jù)交換格式,它的平臺(tái)無關(guān)性、語言無關(guān)性、系統(tǒng)無關(guān)性、給數(shù)據(jù)集成與交互帶來了極大的方便。接下來將要在文章中為大家具體介紹在Java中解析XML的方式,具有一定的參考作用,希望對(duì)大家有所幫助

Java中解析XML的方式有哪些

【推薦課程:XML教程

立即學(xué)習(xí)Java免費(fèi)學(xué)習(xí)筆記(深入)”;

使用DOM解析

DOM解析器主要用于在內(nèi)存中使用XML作為對(duì)象圖(樹狀結(jié)構(gòu)) 也就是文檔對(duì)象模型(DOM)。首先解析器遍歷輸入XML文件并創(chuàng)建與XML文件中的節(jié)點(diǎn)相對(duì)應(yīng)的DOM對(duì)象。這些DOM對(duì)象以樹狀結(jié)構(gòu)鏈接在一起。一旦解析器完成了解析過程,就會(huì)從中獲得這個(gè)類似樹的DOM對(duì)象結(jié)構(gòu)。

例:在所有代碼示例中解析xml內(nèi)容

public class DOMParserDemo {
 
  public static void main(String[] args) throws Exception {
    DocumentBuilderFactory factory =
        DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document =
      builder.parse(
        ClassLoader.getSystemResourceAsStream("xml/employee.xml"));
    List<Employee> empList = new ArrayList<>();
    NodeList nodeList = document.getDocumentElement().getChildNodes();
    for (int i = 0; i < nodeList.getLength(); i++) {
      Node node = nodeList.item(i);
      if (node instanceof Element) {
        Employee emp = new Employee();
        emp.id = node.getAttributes().
            getNamedItem("id").getNodeValue();
        NodeList childNodes = node.getChildNodes();
        for (int j = 0; j < childNodes.getLength(); j++) {
          Node cNode = childNodes.item(j);
          if (cNode instanceof Element) {
            String content = cNode.getLastChild().
                getTextContent().trim();
            switch (cNode.getNodeName()) {
              case "firstName":
                emp.firstName = content;
                break;
              case "lastName":
                emp.lastName = content;
                break;
              case "location":
                emp.location = content;
                break;
            }
          }
        }
        empList.add(emp);
      }
    }
   
    for (Employee emp : empList) {
      System.out.println(emp);
    }
 
  }
}
class Employee{
  String id;
  String firstName;
  String lastName;
  String location;
 
  @Override
  public String toString() {
    return firstName+" "+lastName+"("+id+")"+location;
  }
}
登錄后復(fù)制

輸出結(jié)果為:

Rakesh Mishra(111)Bangalore
John Davis(112)Chennai
Rajesh Sharma(113)Pune
登錄后復(fù)制
登錄后復(fù)制

使用SAX 解析

SAX Parser與DOM解析器的不同之處在于SAX解析器不會(huì)將完整的XML加載到內(nèi)存中,而是在遇到不同的元素時(shí),它逐行解析XML,c觸發(fā)不同的事件,例如:打開標(biāo)記,結(jié)束標(biāo)記,字符數(shù)據(jù),評(píng)論等。

使用SAX Parser解析XML的代碼如下:

import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SAXParserDemo {
  public static void main(String[] args) throws Exception {
    SAXParserFactory parserFactor = SAXParserFactory.newInstance();
    SAXParser parser = parserFactor.newSAXParser();
    SAXHandler handler = new SAXHandler();
    parser.parse(ClassLoader.getSystemResourceAsStream("xml/employee.xml"),
                 handler);
    for ( Employee emp : handler.empList){
      System.out.println(emp);
    }
  }
}
class SAXHandler extends DefaultHandler {
 
  List<Employee> empList = new ArrayList<>();
  Employee emp = null;
  String content = null;
  @Override
  public void startElement(String uri, String localName,
                           String qName, Attributes attributes)
                           throws SAXException {
       
    switch(qName){
      case "employee":
        emp = new Employee();
        emp.id = attributes.getValue("id");
        break;
    }
  }
 
  @Override
  public void endElement(String uri, String localName,
                         String qName) throws SAXException {
   switch(qName){
     case "employee":
       empList.add(emp);      
       break;
     case "firstName":
       emp.firstName = content;
       break;
     case "lastName":
       emp.lastName = content;
       break;
     case "location":
       emp.location = content;
       break;
   }
  }
 
  @Override
  public void characters(char[] ch, int start, int length)
          throws SAXException {
    content = String.copyValueOf(ch, start, length).trim();
  }
     
}
 
class Employee {
  String id;
  String firstName;
  String lastName;
  String location;
 
  @Override
  public String toString() {
    return firstName + " " + lastName + "(" + id + ")" + location;
  }
}
登錄后復(fù)制

輸出結(jié)果為:

Rakesh Mishra(111)Bangalore
John Davis(112)Chennai
Rajesh Sharma(113)Pune
登錄后復(fù)制
登錄后復(fù)制

使用StAX Parser

StAX用于XML的Streaming API,而StAX Parser與SA的不同之處在于SAX Parser。StAX解析器也是一種與SAX解析器也是有所不同的

SAX Parser會(huì)推送數(shù)據(jù),但StAX解析器會(huì)從XML中提取所需的數(shù)據(jù)。StAX解析器將光標(biāo)維持在文檔中的當(dāng)前位置,允許提取光標(biāo)處可用的內(nèi)容,而SAX解析器在遇到某些數(shù)據(jù)時(shí)發(fā)出事件。

XMLInputFactory和XMLStreamReader是可用于加載XML文件的兩個(gè)類。當(dāng)我們使用XMLStreamReader讀取XML文件時(shí),事件以整數(shù)值的形式生成,然后將這些事件與XMLStreamConstants中的常量進(jìn)行比較。以下代碼顯示了如何使用StAX解析器解析XML:

import java.util.ArrayList;
import java.util.List;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
 
public class StaxParserDemo {
  public static void main(String[] args) throws XMLStreamException {
    List<Employee> empList = null;
    Employee currEmp = null;
    String tagContent = null;
    XMLInputFactory factory = XMLInputFactory.newInstance();
    XMLStreamReader reader =
        factory.createXMLStreamReader(
        ClassLoader.getSystemResourceAsStream("xml/employee.xml"));
         
    while(reader.hasNext()){
      int event = reader.next();
      switch(event){
        case XMLStreamConstants.START_ELEMENT:
          if ("employee".equals(reader.getLocalName())){
            currEmp = new Employee();
            currEmp.id = reader.getAttributeValue(0);
          }
          if("employees".equals(reader.getLocalName())){
            empList = new ArrayList<>();
          }
          break;
           
        case XMLStreamConstants.CHARACTERS:
          tagContent = reader.getText().trim();
          break;
           
        case XMLStreamConstants.END_ELEMENT:
          switch(reader.getLocalName()){
            case "employee":
              empList.add(currEmp);
              break;
            case "firstName":
              currEmp.firstName = tagContent;
              break;
            case "lastName":
              currEmp.lastName = tagContent;
              break;
            case "location":
              currEmp.location = tagContent;
              break;
          }
          break;
        case XMLStreamConstants.START_DOCUMENT:
          empList = new ArrayList<>();
          break;
      }
 
    }
    for ( Employee emp : empList){
      System.out.println(emp);
    }
       
  }
}
 
class Employee{
  String id;
  String firstName;
  String lastName;
  String location;
   
  @Override
  public String toString(){
    return firstName+" "+lastName+"("+id+") "+location;
  }
}
登錄后復(fù)制

輸出結(jié)果為:

Rakesh Mishra(111) Bangalore
John Davis(112) Chennai
Rajesh Sharma(113) Pune
登錄后復(fù)制

總結(jié):以上就是本篇文章的全部?jī)?nèi)容了,希望對(duì)大家有所幫助

以上就是Java中解析XML的方式有哪些的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

java速學(xué)教程(入門到精通)
java速學(xué)教程(入門到精通)

java怎么學(xué)習(xí)?java怎么入門?java在哪學(xué)?java怎么學(xué)才快?不用擔(dān)心,這里為大家提供了java速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn
作者最新文章
最新問題
開源免費(fèi)商場(chǎng)系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)