使用JAXP对XML文档进行DOM解析
生活随笔
收集整理的這篇文章主要介紹了
使用JAXP对XML文档进行DOM解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、XML解析方式分為兩種:dom和sax
- dom:(Document Object Model,即文檔對象模型)是W3C組織推薦的解析XML的一種方式。
- sax:(Simple API for XML)不是官方標準,但它是XML社區事實上的標準,幾乎所有的XML解析器都支持它。
dom和sax解析方法的區別:
- dom:對文檔CRUD(增刪改查)比較方便,缺點:占用內存比較大(將xml文件全部讀入內存)。
- sax:占用內存較少,解析速度快(從上往下讀一行解析一行)。缺點:只適合讀取,不適合CRUD。
XML解析開發包:Jaxp(sun)、Jdom、dom4j
今天學習Jaxp:
二、使用JAXP對XML文檔進行DOM解析:
?
private static String filename="src/exam.xml"; public static Document getDocument() throws Exception{//1創建工廠DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//2得到dom解析器對象DocumentBuilder builder=factory.newDocumentBuilder();//3解析xml文檔,得到代表文檔的documentreturn builder.parse(filename);}更加形象的描述為下圖:
增,刪,改 需要將更新后的內容在寫到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) );}三、實戰演練:
books.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><書架><書><書名 name="xxx">影響力</書名><作者>羅伯特.西奧迪尼</作者><售價>90</售價></書><書><書名>JavaScript</書名><作者>JS</作者><售價>45</售價></書> </書架>讀取XML文件,JUnit測試:
@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文件中的所有節點
@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文件中的所有節點* */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);}}添加節點到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("售價");//創建節點//把創建的節點添加到第一本書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"));}為標簽添加屬性:
@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("售價").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"));}快樂學習,輕松掌握!
?
轉載于:https://www.cnblogs.com/lyjs/p/4858814.html
總結
以上是生活随笔為你收集整理的使用JAXP对XML文档进行DOM解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数独问题流程图_数独求解算法
- 下一篇: 大话设计模式笔记 享元模式