課程
/后端開發(fā)
/Java
/Java眼中的XML 文件寫入
如何向已經(jīng)存在的xml文件中追加內(nèi)容
2015-02-15
源自:Java眼中的XML 文件寫入 2-2
正在回答
可以使用DOM、JDOM和SAX方式向一個(gè)已經(jīng)存在的XML文件中追加內(nèi)容,SAX方式比較復(fù)雜。例如:原來的XML文件是:
<?xml?version?=?"1.0"?encoding?=?"utf-8"?> <bookstore> <book?id="1"> <name>冰與火之歌</name> <author>喬治馬丁</author> <year>2014</year> <price>89</price> </book> <book?id="2"> <name>安徒生童話</name> <year>2004</year> <price>77</price> <language>English</language> </book> </bookstore>
????我們要向第一個(gè)book節(jié)點(diǎn)的最后添加一個(gè)language節(jié)點(diǎn):
<?xml?version="1.0"?encoding="UTF-8"?> <bookstore>? ??<book?id="1">? ????<name>冰與火之歌</name>?? ????<author>喬治馬丁</author>?? ????<year>2014</year>?? ????<price>89</price>?? ????<language>簡體中文</language> ??</book>?? ??<book?id="2">? ????<name>安徒生童話</name>?? ????<year>2004</year>?? ????<price>77</price>?? ????<language>English</language>? ??</book>? </bookstore>
基本思路是先解析到適當(dāng)?shù)奈恢迷龠M(jìn)行插入:
DOM方式:
????private?static?void?appendXMLByDOM()?throws?ParserConfigurationException, TransformerException,?SAXException,?IOException?{ //?1.創(chuàng)建一個(gè)DocumentBuilderFactory對象 DocumentBuilderFactory?dbf?=?DocumentBuilderFactory.newInstance(); //?2.根據(jù)DocumentBuilderFactory對象創(chuàng)建一個(gè)DocumentBuilder對象 DocumentBuilder?db?=?dbf.newDocumentBuilder(); //?3.使用DocumentBuilder對象的parse()方法返回一個(gè)Document對象(DOM樹) Document?document?=?db.parse("books1.xml"); document.setXmlStandalone(true);//?設(shè)置XML文件的聲明standalone的值為yes并不予顯示 ????????????????//?4.追加節(jié)點(diǎn) Node?book?=??document.getElementsByTagName("book").item(0);//?得到第一個(gè)book節(jié)點(diǎn) Element?language?=?document.createElement("language"); language.setTextContent("簡體中文"); book.appendChild(language); //?5.創(chuàng)建一個(gè)TransformerFactory對象 TransformerFactory?tff?=?TransformerFactory.newInstance(); //?6.通過TransformerFactory對象創(chuàng)建一個(gè)Transformer對象 Transformer?tf?=?tff.newTransformer(); //?7.利用Transformer對象的transform方法指定輸出流 tf.setOutputProperty(OutputKeys.INDENT,?"yes");//?設(shè)置縮進(jìn)、換行 tf.transform(new?DOMSource(document),?new?StreamResult(new?File( "books_append_dom.xml"))); ????}
JDOM方式:
????public?static?void?appendXMLByJDOM()?{ //?1.創(chuàng)建一個(gè)SAXBuilder對象 SAXBuilder?saxBuilder?=?new?SAXBuilder(); InputStream?in; try?{ //?2.創(chuàng)建一個(gè)輸入流,將xml文件加載到輸入流 in?=?new?FileInputStream("books1.xml"); //?3.通過SAXBuilder的build方法將輸入流加載到SAXBuilder中 Document?document?=?saxBuilder.build(in); //?4.通過Document對象獲取xml文件的根節(jié)點(diǎn) Element?rootElement?=?document.getRootElement(); //?5.根據(jù)根節(jié)點(diǎn)獲取子節(jié)點(diǎn)的List集合 List<Element>?bookList?=?rootElement.getChildren(); //?6.追加節(jié)點(diǎn) Element?language?=?new?Element("language"); language.setText("簡體中文"); bookList.get(0).addContent(language); //?7.設(shè)置輸出流和輸出格式 Format?format?=?Format.getCompactFormat(); format.setEncoding("gb2312");//設(shè)置編碼方式為gb2312 format.setIndent(" ");//設(shè)置縮進(jìn)(此處為一個(gè)tab鍵) XMLOutputter?outputter?=?new?XMLOutputter(format); outputter.output(document,?new?FileOutputStream("books_append_jdom.xml")); }?catch?(FileNotFoundException?e)?{ e.printStackTrace(); }?catch?(JDOMException?e)?{ e.printStackTrace(); }?catch?(IOException?e)?{ e.printStackTrace(); } }
DOM4J方式:
????public?static?void?appendXMLByDOM4J()?throws?IOException?{ //?1.創(chuàng)建一個(gè)SAXReader對象reader SAXReader?reader?=?new?SAXReader(); try?{ //?2.通過reader對象的read方法加載xml文件,獲取Document對象 Document?document?=?reader.read(new?File("books1.xml")); Element?bookStore?=?document.getRootElement();//?通過document對象獲取根節(jié)點(diǎn)bookstore Element?book?=?bookStore.element("book"); Element?language?=?book.addElement("language"); language.setText("簡體中文"); //?3.設(shè)置輸出格式和輸出流 OutputFormat?format?=?OutputFormat.createPrettyPrint(); XMLWriter?writer?=?new?XMLWriter(new?FileOutputStream( "books_append_dom4j.xml"),?format); writer.write(document);//?將文檔寫入到輸出流 writer.close(); }?catch?(DocumentException?e)?{ e.printStackTrace(); } }
????其中DOM4J方式是最簡單的,推薦使用這種方式。
飛了的人 提問者
JessicaJiang
舉報(bào)
舉例說明JAVA程序如何生成XML文檔,多種生成方式任你選擇
2 回答如何文件續(xù)寫實(shí)現(xiàn)文件存儲(chǔ)?
1 回答【2-3作業(yè)】豐富創(chuàng)建的XML文件中的內(nèi)容
5 回答換行但是沒有縮進(jìn)。。。這個(gè)要怎么辦? 如何在已有的xml文件中,再加一個(gè)book子節(jié)點(diǎn)?
3 回答添加/修改XML文件節(jié)點(diǎn)
2 回答關(guān)于在eclipse中打開xml文件
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2015-02-16
可以使用DOM、JDOM和SAX方式向一個(gè)已經(jīng)存在的XML文件中追加內(nèi)容,SAX方式比較復(fù)雜。例如:原來的XML文件是:
????我們要向第一個(gè)book節(jié)點(diǎn)的最后添加一個(gè)language節(jié)點(diǎn):
基本思路是先解析到適當(dāng)?shù)奈恢迷龠M(jìn)行插入:
DOM方式:
JDOM方式:
DOM4J方式:
????其中DOM4J方式是最簡單的,推薦使用這種方式。