国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Java XML解析之DOM

2019-11-15 00:36:27
字體:
供稿:網(wǎng)友
java xml解析之DOMDOM解析是官方提供的XML解析方式之一,使用時(shí)無需引入第三方包,代碼編寫簡單,方便修改樹結(jié)構(gòu),但是由于DOM解析時(shí)是將整個(gè)XML文件加載到內(nèi)存中進(jìn)行解析,因此當(dāng)XML文件較大時(shí),使用DOM解析效率會(huì)降低,而且可能造成內(nèi)存溢出。當(dāng)XML文件較大時(shí)應(yīng)采用SAX解析(下一篇中會(huì)介紹)。通常情況下,若XML文件只是用作系統(tǒng)的配置文件,文件一般不會(huì)很大,使用DOM解析基本就能解決問題。以下分別是解析和生成xml的基本步驟:1. XML解析:上文已經(jīng)說過DOM解析時(shí)是將整個(gè)XML文件加載到內(nèi)存中,所以解析的第一步就是加載文件,需要用到以下代碼:
1 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();2 DocumentBuilder builder = factory.newDocumentBuilder();3 Document document = builder.parse(in);// 參數(shù)有多種類型,在此例中選擇的是InputStream類型的參數(shù)

這三行代碼分別是創(chuàng)建解析器工廠,創(chuàng)建解析器,獲取解析的XML文檔樹,之后就可以對document對象進(jìn)行具體的操作。

其中的主要操作大概有以下幾種:
1 Element root = document.getDocumentElement();// 獲取文檔的根節(jié)點(diǎn)2 NodeList nodeList = document.getElementsByTagName("nodename");// 根據(jù)節(jié)點(diǎn)名稱獲取節(jié)點(diǎn)列表

然后再循環(huán)遍歷nodeList中的節(jié)點(diǎn),利用節(jié)點(diǎn)對象的getChildNodes()的方法獲取子節(jié)點(diǎn)列表,直到取到所需要的節(jié)點(diǎn)。

解析注意點(diǎn):Dom解析會(huì)將xml中兩個(gè)標(biāo)簽之間的所有內(nèi)容都看成是子節(jié)點(diǎn),包括空白,其中節(jié)點(diǎn)類型分為:
1. 帶有標(biāo)簽的子節(jié)點(diǎn)看成Element類型的子節(jié)點(diǎn)2. 不包含標(biāo)簽的空白子節(jié)點(diǎn)或者文字節(jié)點(diǎn)看成是text類型的子節(jié)點(diǎn)
獲取節(jié)點(diǎn)值時(shí),必須獲取text類型的節(jié)點(diǎn)的值,而不是Element類型節(jié)點(diǎn)的值,Element節(jié)點(diǎn)的值永遠(yuǎn)都是null,也可以使用Element節(jié)點(diǎn)的getTextContent()來獲取Element類型的節(jié)點(diǎn)值所以,在遍歷子節(jié)點(diǎn)時(shí),需要做nodeList.item(i).getNodeType() == Element.ELEMENT_NODE這樣的一次判斷,若為true,則執(zhí)行nodeList.item(i).getTextContent()來獲取節(jié)點(diǎn)的值。2. XML生成:首先是創(chuàng)建一個(gè)Document對象,需要用到以下代碼:
1 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();2 DocumentBuilder builder = factory.newDocumentBuilder();3 Document document = builder.newDocument();

然后是document對象的配置以及節(jié)點(diǎn)的創(chuàng)建和添加:

1 document.setXmlStandalone(true); //非必須配置,配置之后可以去除不必要的standalone屬性2 Element root = document.createElement("nodes"); // 創(chuàng)建文檔根節(jié)點(diǎn)3 document.appendChild(root);// 將根節(jié)點(diǎn)加入文檔中

創(chuàng)建子節(jié)點(diǎn),添加id屬性,并加入根節(jié)點(diǎn)中,xml中節(jié)點(diǎn)的父子關(guān)系是通過節(jié)點(diǎn)的appendChild方法形成的。

1 Element node = document.createElement("node");// 創(chuàng)建子節(jié)點(diǎn)2 node.setAttribute("id", "1"); // 為子節(jié)點(diǎn)添加屬性3 root.appendChild(node); // 將子節(jié)點(diǎn)加入到根節(jié)點(diǎn)中

當(dāng)節(jié)點(diǎn)設(shè)置完成之后需要將document對象轉(zhuǎn)換成xml文件,需要通過以下代碼轉(zhuǎn)換:

1 TransformerFactory factory = TransformerFactory.newInstance(); // 工廠類,用來獲取轉(zhuǎn)換對象2 Transformer transformer = factory.newTransformer(); // 獲取用于轉(zhuǎn)換的對象3 transformer.setOutput至此,通過DOM完成了XML文件的生成。DOM解析與創(chuàng)建XML的基本步驟也就是以上這么多,這是我學(xué)習(xí)之后的總結(jié),希望對需要學(xué)習(xí)這方面知識(shí)的朋友能有些許幫助。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 溧阳市| 买车| 大竹县| 大安市| 于田县| 长白| 清原| 龙口市| 英德市| 密云县| 桦甸市| 深圳市| 葵青区| 凉城县| 霞浦县| 闽侯县| 浦县| 桃源县| 卫辉市| 托克托县| 万山特区| 谷城县| 建平县| 黔西县| 永城市| 威远县| 陈巴尔虎旗| 沙湾县| 青岛市| 封开县| 壤塘县| 盐池县| 泽普县| 清流县| 逊克县| 景谷| 金寨县| 巫溪县| 鸡泽县| 孙吴县| 新巴尔虎右旗|