您好,登錄后才能下訂單哦!
本篇內容主要講解“java怎么解析XML”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java怎么解析XML”吧!
XML的主要用途
對比HTML
關于XML文件的解析?
JDK自帶的一套解析
--數據存儲和數據描述
--是一個優良的配置文件
--相當于一個小型數據庫
--XML不依賴于任何一種編程語言,是獨立的W3C提供的規范,所以可以完成多種語言之間的數據交換(重點)
XML的語法嚴格,并且完全區分大小寫
XML(eXtensible Markup Language
)-描述事物本身 .xml
XSL (eXtensible Stylesheet Language
)-修飾XML XSL文件也有單獨的文件,文件后綴 .xsl
通過以下陳程序引入xsl文件
<?xml-stylesheet type="text/xsl" href="student.xsl"?>
DTD (Docment Type Definition
)-約定xml的標簽 在XML文件中只能編寫那些標簽,標簽中只能編寫那些屬性 DTD有單獨的文件,文件后綴 .dtd
DTD實例
Schema-約定xml標簽和類型,比DTD編寫更加方便,(約束XML文件) schema有單獨的文件,文件后綴 .xsd/.xml
實例是:
<?xml version="1.0" encoding="gb2312"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="叢書"> <xs:complexType> <xs:sequence> <xs:element name="書"> <xs:element name="名" minoccurs="1"></xs:element> <xs:element name="人"></xs:element> <xs:element name="價"> <xs:attribute name="unit"> <xs:enumeration value="RMB"/> <xs:enumeration value="美元"/> <xs:enumeration value="日元"/> </xs:attribute> </xs:element> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
可以擴展的原因:DTD可以修改
HTML(Hyper Text Markup language
)
*超文本傳輸標記語句(程序員不能自己擴展)
*HTML主要用途:做頁面展示,不會做數據處理
*語法松散,不區分大小寫
CSS
DTD(Doucment Type Defined
)約束HTML能有那些標簽,標簽能有那些屬性
schema (DTD的升級版,語法更新一些,和DTD達到同等效果)
不可擴展原因:DTD不可擴展
*無論是哪一種編程語言,對XML文件的解析都包括兩種方式:
*DOM解析
*SAX解析(org.xml.sax.helps DefaultHandler)
DOM解析
*原理
在開始解析XML文件的時候,將整個XMl文件全部加載到內存中
在內存中編程語言將XML文件映射成一顆DOM樹,這顆樹就是一個
對象,然后我們對這棵樹上的任意節點進行增刪改查操作,由于
這棵樹全部都在內存上,解析過去的節點可以再次解析,比較靈活。
*優點
靈活,解析過去的節點,可以再次解析
*缺點
如果XML文件比較大,可能會導致內存溢出,即使不導致內存溢出,
也會耗費大量內存,內存少了項目的運行效率自然就降低了。
*什么情況下選擇dom解析方式
如果很靈活的操作每一個元素,選用dom解析,但是注意文件需要小一些
SAX解析
*原理
SAX解析是基于事件驅動型的解析方式,他的解析不需要將整個XML文件全部
轉載到內存中,解析的時候是有順序的,在XML文件中從上往下依次解析,遇
到開始標簽,表示發生了一個特定的事件,此時執行一段特定的程序,遇到結束
標簽表示又發生一個特定事件,此時執行一段特定的程序完成解析。
*優點
不需要轉載XML文件,所以不會占用大量內存, 適合大文件
*缺點
解析過去的節點不能重復解析,除非重頭開始
*什么情況下選擇SAX解析方式
大文件適合使用SAX解析
作為程序員如何解析XML文件,解析XMl文件的開源項目都包括那些?
java解析XML相關的開源項目
*DOM4j(Dom for Java)
*JDOM
.....
JDK自帶一套,是實現W3C規范的
*org.w3c.com.*; 基于DOM解析
*org.xml.sax.*; 基于SAX解析
為了提高我們解析XMl文件的效率,還涉及到XPATH。(是一種標簽匹配方式,類似于正則表達式,可以讓我們程序快速定位XML文件中的標簽)
解析XML文件涉及到:
DOM4j/JDOM/W3C+......Xpath
首先在src目錄下創建一個xml文件
以下為解析過程
/** * 使用JDK自帶的"Dom解析"XML文件(讀) */ public class Text04 { public static void main(String[] args) throws Exception { //創建文檔解析器工廠對象 DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance(); //創建文檔解析器對象 DocumentBuilder builder=factory.newDocumentBuilder(); //開始解析XML文件 String path=Thread.currentThread().getContextClassLoader().getResource("db-config.xml").toURI().getPath(); Document document =builder.parse(new File(path));//dom樹,在內存中生成了一顆dom樹 //獲取根元素 Node rootNode=document.getFirstChild(); //獲取根元素的名字 System.out.println(rootNode.getNodeName()); //通過根元素獲取其他元素 Node driverNode=document.getElementsByTagName("driver").item(0); String driver =driverNode.getTextContent(); System.out.println(driver); } }
輸出結果
使用dom4j開源項目(基于dom解析)解析xml文件(讀)
需要將dom4j開源項目的jar包作為目錄導入
/** * 使用dom4j開源項目解析XML文件(讀) * * 讀XML文件 * * DOM4j * * 基于dom方式 */ public class Text01 { public static void main(String[] args) throws Exception { //創建解析器對象 SAXReader reader=new SAXReader();//雖然使用了SAXReader,但是還是基于DOM的解析方式 //獲取文檔對象,還是dom樹 String path=Thread.currentThread().getContextClassLoader().getResource("db-config.xml").toURI().getPath(); Document document= reader.read(new File(path)); //獲取根元素 Element rootElement=document.getRootElement(); //System.out.println(element.getName()); //獲取driver元素 Element driverElement =rootElement.element("driver"); //在獲取文本 String driver=driverElement.getText(); //System.out.println(driver); //直接獲取元素的文本內容 driver=rootElement.elementText("driver"); System.out.println(driver); System.out.println(rootElement.elementText("url")); System.out.println(rootElement.elementText("user")); System.out.println(rootElement.elementText("password")); } }
輸出結果
使用dom4j開源項目(基于dom解析)解析xml文件(寫)
import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; import java.io.File; import java.io.FileWriter; /** * 使用dom4j開源項目解析XML文件(寫) */ public class Text02 { public static void main(String[] args) throws Exception { //創建文檔對象 Document document= DocumentHelper.createDocument(); //添加根元素 Element studentInfoElt=document.addElement("學生信息"); //給學生信息節點添加子節點學生節點 Element studentElt=studentInfoElt.addElement("學生"); //給學生節點添加id屬性 studentElt.addAttribute("id","110"); //給學生節點添加名字字節點 Element nameElt=studentElt.addElement("名字"); //設置名字節點文本 nameElt.setText("張三"); //給學生節點添加性別字節點 Element sexElt=studentElt.addElement("性別"); //設置名字節點文本 sexElt.setText("男"); //開始寫 OutputFormat format= OutputFormat.createPrettyPrint(); format.setEncoding("utf-8"); String path="students.xml"; XMLWriter xmlWriter=new XMLWriter(new FileWriter(new File(path)),format); xmlWriter.write(document); xmlWriter.close(); } }
最終生成的xml文件
到此,相信大家對“java怎么解析XML”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。