亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Java眼中的XML---文件讀取

難度初級
時長 3小時 0分
學習人數
綜合評分9.63
323人評價 查看評價
9.9 內容實用
9.5 簡潔易懂
9.5 邏輯清晰
  • 常用的節點類型

    查看全部
  • 四種解析xml文件的方式:DOM、SAX、DOM4J、JDOM

    查看全部
  • xml的作用

    查看全部
    0 采集 收起 來源:初次邂逅 XML

    2018-05-21

  • books.xml實例

    查看全部
    0 采集 收起 來源:初次邂逅 XML

    2018-05-21

  • xml結構簡介

    查看全部
    0 采集 收起 來源:初次邂逅 XML

    2018-05-21

  • 常用的節點類型

    查看全部
  • xml文件解析sax>dom>dom4j>jdom

    查看全部
  • SAX解析XML的速度比DOM的塊,
    SAX的解析XML的解析器,需要重寫startElement()開始解析的方法and endElemaent()方法 結束解析的方法and characters()方法
    重寫charaters()方法時,String(byte[] bytes,int offset,int length)的構造方法進行數組的傳遞
    再去除解析時多余空格
    if(!value.trim().equals("")){
    System.out.println(value);
    }


    使用 SAX 解析 XML 文件的節點名和節點間文本

    startElement方法——String qName(第三個參數):節點名

    startElement方法——Attributes attributes(第四個參數):節點名的屬性操作

    characters方法——char[] ch(第一個參數):xml整個文本內容,所以需截取想要的內容

    如圖代碼+以下代碼

    public void endElement(String uri, String localName, String qName)
    throws SAXException {
    //調用DefaultHandler類的endElement方法
    super.endElement(uri, localName, qName);
    //判斷是否針對一本書已經遍歷結束
    if (qName.equals("book")) {
    System.out.println("======================結束遍歷某一本書的內容=================");
    }
    }
    characters(char[] ch, int start, int length) 方法總結:

    簡單來說解析器首先在startDocument之后會讀取XML中的字符串(從根節點開始一直到根節點結束)并放入ch[]字符數組中去,然后在解析到#TEXT節點(包括空格和換行符)時使用start來標記字符在ch[]數組中的起始位置,length標記長度,然后調用character方法,character方法默認不會進行任何處理,想進行處理需要重寫方法。
    public void characters(char[] ch, int start, int length)
    throws SAXException {
    // TODO Auto-generated method stub
    super.characters(ch, start, length);
    value = new String(ch, start, length);
    if (!value.trim().equals("")) {
    System.out.println("節點值是:" + value);
    }
    }

    查看全部
  • 獲取xml的標簽
    開始:startElement(String uri, String localName, String qName,Attributes attributes)
    獲取屬性名:attributes.getQName(i);獲取屬性值:attributes.getValue(i)
    結束:endElement(String uri, String localName, String qName)

    解析xml元素(重寫startElement()方法)
    1. 調用DefaultHanlder 的startElement()方法
    super.startElement(uri,localName,qName,attributes);
    2. 開始解析book元素屬性
    /**
    * 解析xml元素
    */
    @Override
    public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException {
    // 調用父類(DefaultHandler)的startElement方法
    super.startElement(uri, localName, qName, attributes);
    // 開始解析book元素的屬性
    if (qName.equals("book")) {
    // //已知book元素下屬性的名稱,根據屬性名稱獲取屬性值
    // String value = attributes.getValue("id");
    // System.out.println("book的屬性值是:" + value);
    // 不知道book元素下屬性的名稱以及個數,如何獲取屬性名以及屬性值
    int num = attributes.getLength();
    for (int i = 0; i < num; i++) {
    System.out.print("book元素的第" + (i + 1) + "個屬性名是:"
    + attributes.getQName(i));
    System.out.println("---屬性值是:" + attributes.getValue(i));
    }

    }
    }

    查看全部
  • SAX方式解析xml步驟
    1.通過SAXParserFactory的靜態newInstance()方法獲取一個SAXParserFactory的對象。

    SAXParserFactory factory = SAXParserFactory.newInstance();

    2.通過SAXParserFactory對象的newSAXParser()方法返回一個SAXParser類的對象。

    SAXParser parser = factory.newSAXParser();

    3.創建一個類繼承DefaultHandler,重寫其中的一些方法并創建類的實例.

    類SAXParserHandler implements DefaultHandler;

    4.通過SAXParser類的Parse(Stringname,df)方法解析xml文件,參數Stringname為路徑名,df為繼承于DefaultHandler類的實例化對象,不需要定義變量存儲返回的類型.

    SAX是按節點順序進行解析,遇到xml的聲明即開始解析,遇到最后一個節點的尾節點便結束解析,需要用戶自己定義一個類繼承于DefaultHandler類來解析,遇到開始標簽節點便通過startElement開始解析節點,遇到結束標簽節點便通過endElement結束解析,再遇到開始節點繼續通過startElement解析,一直循環直到xml文件最后的結束標簽節點.

    5.在繼承于DefaultHandler這個類中需要重寫父類的startElement()和endElement()方法,來進行開始節點與結束節點的解析,再重寫startDocument()方法與endDocument()方法來標識解析的開始與結束.

    public class SAXParserHandler extends DefaultHandler {

    /**
    * 用來標識解析開始
    */
    public void startDocument() throws SAXException {
    super.startDocument();
    System.out.println("SAX解析開始");
    }

    /**
    * 解析xml元素節點開始
    */
    public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException {
    super.startElement(uri, localName, qName, attributes);
    System.out.println("解析xml元素開始");
    }

    /**
    * 處理文本內容(獲取的是整個XML文本內容)
    */
    public void characters(char[] ch, int start, int length)
    throws SAXException {
    super.characters(ch, start, length);
    System.out.println("文本處理中...");
    }

    /* 解析xml元素節點結束
    */
    public void endElement(String uri, String localName, String qName)
    throws SAXException {
    super.endElement(uri, localName, qName);
    System.out.println("解析xml元素結束");
    }

    /**
    * 用來標識解析結束
    */
    public void endDocument() throws SAXException {
    super.endDocument();
    System.out.println("SAX解析結束");
    }

    6.創建SAXParserHandler對象
    ??????? SAXParserHandler handler = new SAXParserHandler()
    7.調用parse(url,handler實例)方法
    ??????? parser.parse("book.xml",handler);

    查看全部
  • 解析文件節點以及子節點的值
    1.先獲取子節點,Node下有方法getChildNodes()來獲取某個節點的子節點的集合,返回NodeList類型.
    NodeList childNodes=book.getChildNodes()//包含book節點所有的子節點,兩個標簽之間的所有內容都看成是子節點.
    2.通過childNodes的getLength()方法返回字點的個數(空格與換行字符看成為一個文本節點,標簽與結束標簽看成一個元素節點)
    3.通過NodeList的item(i)獲取指定位置子節點的名稱返回Node類型.再用Node類型的getNodeName()方法就可以獲取節點名
    Node childnode=childNodes.item(i);
    String name=childnode.getNodeName();
    可以通過Node類的getNodeType()來區分文本類型的node以及元素類型的node,看當前Node類型是否與Node."節點類型英文全稱"相同.
    if(childnode.getNodeType==Node.ELEMENT_NODE)
    {System.out.println(name)}
    4.不能直接通過Node的getNodeValue()來獲取節點的值,因為元素節點的nodeValue的返回值為null而且標簽之間的文本被看做是該標簽的子節點.所以要用Node的getFirstChild()此時獲取的子節點為文本節點,Text節點類型的nodeValue返回值為節點內容,再getNodeValue()。
    或者直接用Node的getTextContent()方法直接獲取節點值。
    如果該Node節點還存在其他子節點并且有節點值<name><a>呵呵呵</a>華以及咯</name>,那么用getFirstChild().getNodeValue()一樣是null,因為獲取的子節點仍然是element類型的
    如果用Node的getTextContent(),一樣會把<a>元素節點當成是Content輸出。 結果為呵呵呵華以及咯。

    查看全部
  • document.getElementByTagName(),獲取標簽集合<br>
    2.node.getAttribute(),獲取屬性集合(應該是一個Map集合)<br>
    3.NodeList集合(標簽集合) NameNodeMap集合(屬性集合)<br>

    1.獲取book節點的子節點。NodeList childNodes =book.getChildNodes();<br>
    2.獲取book下子節點的節點內容的兩種方式:<br>
    1)childNodes.item(index).getFirstChild().getNodeValue();<br>
    2)childNodes.item(index).getTextContent();<br>
    第一種方式在其下面還有子節點時,會因為是Element節點所以默認的getNodeValue()返回值是null;<br>
    第二章方式在其下面還有子節點時,會將子節點內容與當前節點內容一起獲取。
    注:在獲取當前節點的子節點時,當前節點下的空格與回車符會被當做Text類型的子節點獲?。?Test)。

    查看全部
  • 使用Dom解析xml文件的屬性節點。
    在不知道節點屬性的個數和屬性名時:
    1、通過document.getElementByTagName("標簽名")獲得所有標簽名的節點,得到一個NodeList集合
    2、通過NodeList.getLength()獲得集合長度,遍歷集合
    3、Node node = NodeList.item(index)獲得里面的節點
    4、通過NamedNodeMap attrs = node.getAttributes()獲取所有屬性集合
    5、通過attrs.getLength()遍歷集合,Node attr = atrrs.item(index)
    6、attr.getNodeName()獲得屬性名,attr.getNodeValue()獲取屬性值
    前提已經知道book節點有且只有1個id屬性,將book節點進行強制類型轉換,轉換成element類型。
    1、通過document.getElementByTagName("標簽名")獲得所有標簽名的節點,得到一個NodeList集合
    2、通過NodeList.getLength()獲得集合長度,遍歷集合
    3、element book=(element)bookList.item(i);//強制轉換為element類型
    4、string attrValue = book.getAttribute("id");

    DOM 方式解析 XML
    ? DocumentBuilder db =
    DocumentBuilderFactory.newInstance().newDocumentBuilder();
    ? // 通過DocumentBuilder對象的parse方法加載books.xml文件到當前項目下
    ? Document document = db.parse("books.xml");
    ? // 通過標簽名獲取節點集合,? 獲取所有book節點的集合
    ? NodeList bookList = document.getElementsByTagName("book");?
    ? // 遍歷每一個book節點
    ? for(int i = 0; i < bookList.getLength(); i ++){
    ?????? // 通過 item(i) 方法 獲取 一個book節點,nodeList的索引值從 0 開始
    ?????? Node book = bookList.item(i);
    ?????? // 獲取 book 節點的所有屬性的集合
    ?????? NameNodeMap attrs = book.getAttributes();
    ?????? // 遍歷 book 的屬性
    ?????? for(int j = 0; j < attrs.getLength(); j ++){
    ?????????? // 通過 item(index) 方法獲取 book 節點的某一屬性
    ?????????? Node attr = attrs.item(j);?
    ????????? // 獲得屬性名稱
    ?????????? System.out.print("屬性名:" + attr.getNodeName());
    ?????????? System.out.println("---屬性值:" + attr.getNodeValue());
    ?????? }
    ? }

    查看全部
  • 獲取xml文件內容的
    四種解析方式:DOM SAX DOM4J JDOM
    DOM、SAX :java 官方方式,不需要下載jar包
    DOM4J、JDOM :第三方,需要網上下載jar包
    DOM使用步驟:
    準備工作
    1、創建一個DocumentBuilderFactory的對象
    DocumentBuilderFactory dbf = DocumnetBuilderFactory.instance();
    2、創建一個DocumentBuilder的對象
    DocumentBuilder db = dbf.newDocumentBuilder();
    3、通過DocumentBuilder對象的parse方法加載xml文件到當前項目
    Document document = db.parse("*.xml");

    查看全部
  • 不同系統間通信、不同軟件間通信、不同平臺間通信使用xml文件
    XML文件用來存儲數據和傳輸數據
    XML存儲結構為樹狀
    xml聲明:<?xml version="1.0"encoding="utf-8"? >

    XML作用:
    不同應用程序之間通信、傳輸信息(訂票程序和支付程序)
    不同系統間的通信(例:Windows系統和IOS系統)
    不同平臺間的數據共享(手機端和PC端)
    不同APP之間的通信,不同的平臺間的通信,不同平臺間的數據共享。XML文件主要用于存儲以及傳輸信息。
    通過xml文件存儲小型數據。

    查看全部
    0 采集 收起 來源:初次邂逅 XML

    2018-04-30

舉報

0/150
提交
取消
課程須知
本課程是 Java 的中級課程,需要各位小伙伴們熟悉 Java 面向對象的思想,并能熟練掌握 Java I/O 的相關知識。對如何將內容寫入 XML 文件感興趣的小伙伴們,可以進入《Java 眼中的 XML --- 文件寫入》一探究竟
老師告訴你能學到什么?
1、XML 的基本概念 2、XML 在實際項目開發中的的用途和優點 3、如何通過 Java 解析 XML

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!