使用JAXP对XML文档进行DOM解析
生活随笔
收集整理的這篇文章主要介紹了
使用JAXP对XML文档进行DOM解析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、XML解析方式分為兩種:dom和sax
- dom:(Document Object Model,即文檔對(duì)象模型)是W3C組織推薦的解析XML的一種方式。
- sax:(Simple API for XML)不是官方標(biāo)準(zhǔn),但它是XML社區(qū)事實(shí)上的標(biāo)準(zhǔn),幾乎所有的XML解析器都支持它。
dom和sax解析方法的區(qū)別:
- dom:對(duì)文檔CRUD(增刪改查)比較方便,缺點(diǎn):占用內(nèi)存比較大(將xml文件全部讀入內(nèi)存)。
- sax:占用內(nèi)存較少,解析速度快(從上往下讀一行解析一行)。缺點(diǎn):只適合讀取,不適合CRUD。
XML解析開發(fā)包:Jaxp(sun)、Jdom、dom4j
今天學(xué)習(xí)Jaxp:
二、使用JAXP對(duì)XML文檔進(jìn)行DOM解析:
?
private static String filename="src/exam.xml"; public static Document getDocument() throws Exception{//1創(chuàng)建工廠DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//2得到dom解析器對(duì)象DocumentBuilder builder=factory.newDocumentBuilder();//3解析xml文檔,得到代表文檔的documentreturn builder.parse(filename);}更加形象的描述為下圖:
增,刪,改 需要將更新后的內(nèi)容在寫到xml中
public static void writeXml(Document document) throws TransformerException{TransformerFactory factory=TransformerFactory.newInstance();Transformer tf=factory.newTransformer();//transform(Source xmlSource, Result outputTarget)tf.transform(new DOMSource(document), new StreamResult(filename) );}三、實(shí)戰(zhàn)演練:
books.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><書架><書><書名 name="xxx">影響力</書名><作者>羅伯特.西奧迪尼</作者><售價(jià)>90</售價(jià)></書><書><書名>JavaScript</書名><作者>JS</作者><售價(jià)>45</售價(jià)></書> </書架>讀取XML文件,JUnit測(cè)試:
@Testpublic void read() throws ParserConfigurationException, SAXException, IOException {DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuilder();Document document=builder.parse("src/books.xml");NodeList list= document.getElementsByTagName("書名");Node node= list.item(0);String content=node.getTextContent();System.out.println(content);}遞歸遍歷XML文件中的所有節(jié)點(diǎn)
@Testpublic void read1() throws ParserConfigurationException, SAXException, IOException {DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuilder();Document document=builder.parse("src/books.xml");Node root=document.getElementsByTagName("書架").item(0);list(root); }/** 遞歸遍歷XML文件中的所有節(jié)點(diǎn)* */public void list(Node node){if(node instanceof Element){System.out.println(node.getNodeName());}NodeList childs= node.getChildNodes();for(int i=0;i<childs.getLength();i++){Node child=childs.item(i);list(child);}}添加節(jié)點(diǎn)到XML文件中:
@Testpublic void add() throws ParserConfigurationException, SAXException, IOException, TransformerException{DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuilder();Document document=builder.parse("src/books.xml");Element price=document.createElement("售價(jià)");//創(chuàng)建節(jié)點(diǎn)//把創(chuàng)建的節(jié)點(diǎn)添加到第一本書price.setTextContent("90");Element book=(Element) document.getElementsByTagName("書").item(0);book.appendChild(price);//把更新后的文檔TransformerFactory tfactory=TransformerFactory.newInstance();Transformer tf=tfactory.newTransformer();tf.transform(new DOMSource(document), new StreamResult("src/books.xml"));}為標(biāo)簽添加屬性:
@Testpublic void addAttr() throws ParserConfigurationException, SAXException, IOException, TransformerException{DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuilder();Document document=builder.parse("src/books.xml");Element bookname=(Element) document.getElementsByTagName("書名").item(0);bookname.setAttribute("name", "xxx");//把更新后的文檔TransformerFactory tfactory=TransformerFactory.newInstance();Transformer tf=tfactory.newTransformer();tf.transform(new DOMSource(document), new StreamResult("src/books.xml"));}刪除操作:
@Testpublic void delete() throws ParserConfigurationException, SAXException, IOException, TransformerException{DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuilder();Document document=builder.parse("src/books.xml");Element bookname=(Element) document.getElementsByTagName("售價(jià)").item(0);//把更新后的文檔Element e=(Element) document.getElementsByTagName("書").item(0);e.removeChild(bookname);TransformerFactory tfactory=TransformerFactory.newInstance();Transformer tf=tfactory.newTransformer();tf.transform(new DOMSource(document), new StreamResult("src/books.xml"));}快樂學(xué)習(xí),輕松掌握!
?
轉(zhuǎn)載于:https://www.cnblogs.com/lyjs/p/4858814.html
總結(jié)
以上是生活随笔為你收集整理的使用JAXP对XML文档进行DOM解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数独问题流程图_数独求解算法
- 下一篇: 大话设计模式笔记 享元模式