這篇文章給大家分享的是有關(guān)xml解析-增刪改查操作后將其修改結(jié)果保存的方法的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。
專注于為中小企業(yè)提供做網(wǎng)站、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)旌德免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。一、可擴(kuò)展標(biāo)記語言xml:Extensible Markup Language
1、XML的作用:1)統(tǒng)一數(shù)據(jù)傳輸?shù)母袷健?)做小型數(shù)據(jù)庫[文件型數(shù)據(jù)庫]。3)做配置文件 .ini .propertity .xml .cfg
2、XML文件的基本格式:
標(biāo)簽:分為雙標(biāo)簽和單標(biāo)簽,雙標(biāo)簽的開頭和結(jié)尾標(biāo)簽名必須一致,大小寫一樣,/ 開頭的是結(jié)尾標(biāo)簽,單標(biāo)簽必須在 > 前加上 / 來結(jié)尾,單標(biāo)簽中不能放文本。
屬性:在開始標(biāo)簽中定義一些名值對,值一定是字符串
3、XML文件的基本構(gòu)成:
1)在第一行是XML聲明
2)必須且只能有一對根標(biāo)簽
3)標(biāo)簽可以一層一層嵌
二、寫一個(gè)簡單的xml文檔stus.xml然后用Dom進(jìn)行解析。
DOM : Document Object Model 文檔對象模型
DOM解析的基本思路:將整個(gè)XML文件一次性讀入內(nèi)存,將整個(gè)XML看做一棵文檔樹,XML中的每一個(gè)標(biāo)簽,屬性,文本都看做是樹上的一個(gè)結(jié)點(diǎn),然后可以對結(jié)點(diǎn)進(jìn)行增刪改查的操作。
已經(jīng)編輯好的stus.xml文檔
張三 19 男 李四 20 女 王五 21 男
三、開始解析
創(chuàng)建解析工廠
// 得到解析工廠對象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 生產(chǎn)一個(gè)解析器對象 DocumentBuilder builder = factory.newDocumentBuilder(); // 開始解析xml文件,得到的解析結(jié)果是一個(gè)Document對象,Document對象叫做文檔樹對象 Document dom = builder.parse("stus.xml");
1、增加節(jié)點(diǎn)
基本思路:首先創(chuàng)建一個(gè)新的元素節(jié)點(diǎn),將元素節(jié)點(diǎn)追加到根節(jié)點(diǎn)后面,設(shè)置其節(jié)點(diǎn)屬性。創(chuàng)建標(biāo)簽,設(shè)置標(biāo)簽文本內(nèi)容,最后將新標(biāo)簽添加到新的元素節(jié)點(diǎn)中。
代碼:
// 創(chuàng)建一個(gè)新的元素節(jié)點(diǎn) Element stu = dom.createElement("stu"); // 將元素節(jié)點(diǎn)追加到根節(jié)點(diǎn)后面 root.appendChild(stu); // 設(shè)置節(jié)點(diǎn)屬性 stu.setAttribute("num", "04"); // 創(chuàng)建標(biāo)簽 Element name = dom.createElement("name"); Element age = dom.createElement("age"); Element sex = dom.createElement("sex"); // 設(shè)置標(biāo)簽文本內(nèi)容 name.setTextContent("趙六"); age.setTextContent("19"); sex.setTextContent("女"); // 把標(biāo)簽添加到新的元素節(jié)點(diǎn)stu中 stu.appendChild(name); stu.appendChild(age); stu.appendChild(sex);
2、刪除節(jié)點(diǎn)
基本思路:獲得要?jiǎng)h除的節(jié)點(diǎn),然后得到節(jié)點(diǎn)的屬性值,與要?jiǎng)h除的節(jié)點(diǎn)的屬性值進(jìn)行比較,如果該屬性值對應(yīng)的節(jié)點(diǎn)存在則移除該節(jié)點(diǎn)。
代碼:
// 獲得根節(jié)點(diǎn) Element root = (Element) dom.getFirstChild(); // 獲得所有stu節(jié)點(diǎn) NodeList list = dom.getElementsByTagName("stu"); for (int i = 0; i < list.getLength(); i++) { Node node = list.item(i); if (node instanceof Element) { Element e = (Element) node; // 得到節(jié)點(diǎn)的屬性值,與要?jiǎng)h除的結(jié)點(diǎn)的屬性值進(jìn)行比較,然后移除該屬性值對應(yīng)的結(jié)點(diǎn) String num = e.getAttribute("num"); if (num.equals("02")) { root.removeChild(e); break; } } }
3、修改節(jié)點(diǎn)
基本思路:獲得要修改的節(jié)點(diǎn),修改其屬性值,然后獲得該節(jié)點(diǎn)下的標(biāo)簽,修改標(biāo)簽中的文本內(nèi)容。
代碼:
// 修改節(jié)點(diǎn)屬性 for (int j = 0; j < list.getLength(); j++) { Node no = list.item(j); if (no instanceof Element) { Element el = (Element) no; String n = el.getAttribute("num"); if (n.contains("01")) { el.setAttribute("num", "05"); // 修改標(biāo)簽值 NodeList li = el.getChildNodes(); for (int x = 0; x < li.getLength(); x++) { Node d = li.item(x); if (d instanceof Element) { Element ee = (Element) d; String noN = ee.getNodeName(); if (noN.equals("name")) { ee.setTextContent("小白"); } else if (noN.equals("age")) { ee.setTextContent("11"); } else if (noN.equals("sex")) { ee.setTextContent("男"); } } } }
4、查找節(jié)點(diǎn)
基本思路:獲得所有的節(jié)點(diǎn),用 需要查找的結(jié)點(diǎn)的屬性值與所有節(jié)點(diǎn)進(jìn)行比較,如果該節(jié)點(diǎn)存在,就打印該節(jié)點(diǎn)的屬性值及其節(jié)點(diǎn)下標(biāo)簽的內(nèi)容。
代碼:
for (int j = 0; j < list.getLength(); j++) { Node no = list.item(j); if (no instanceof Element) { Element el = (Element) no; String n = el.getAttribute("num"); //查找節(jié)點(diǎn),顯示其屬性值及標(biāo)簽內(nèi)容 if(n.equals("03")){ System.out.println(no.getNodeName()+"\t"+n+no.getTextContent()); } } }
4、保存修改后的xml文檔
基本思路:先將內(nèi)存中的Document對象寫到xml文件中,然后將整個(gè)Document對象作為要寫入xml文件的數(shù)據(jù)源,最后將數(shù)據(jù)源寫入目標(biāo)文件。
代碼:
// 將內(nèi)存中的Document對象寫到xml文件中 TransformerFactory tf = TransformerFactory.newInstance(); Transformer former = tf.newTransformer(); former.setParameter("version", "1.0"); former.setParameter("encoding", "GBK"); // 將整個(gè)Document對象作為要寫入xml文件的數(shù)據(jù)源 DOMSource xmlSource = new DOMSource(dom); // 要寫入的目標(biāo)文件 StreamResult outputTarget = new StreamResult(new File("F:\\stus2.xml")); former.transform(xmlSource, outputTarget);
感謝各位的閱讀!關(guān)于xml解析-增刪改查操作后將其修改結(jié)果保存的方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!