首页 > 代码库 > 使用JAXP对XML文档进行DOM解析

使用JAXP对XML文档进行DOM解析

  1 import java.io.FileOutputStream;  2   3 import javax.xml.parsers.DocumentBuilder;  4 import javax.xml.parsers.DocumentBuilderFactory;  5 import javax.xml.parsers.ParserConfigurationException;  6 import javax.xml.transform.Transformer;  7 import javax.xml.transform.TransformerFactory;  8 import javax.xml.transform.dom.DOMSource;  9 import javax.xml.transform.stream.StreamResult; 10  11 import org.junit.Test; 12 import org.w3c.dom.Document; 13 import org.w3c.dom.Element; 14 import org.w3c.dom.Node; 15 import org.w3c.dom.NodeList; 16  17  18 //使用dom方式对xml文档进行crud 19 public class Demo2 { 20      21     @Test 22     public void read() throws Exception{ 23          24         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 25         DocumentBuilder builder = factory.newDocumentBuilder(); 26         Document document = builder.parse("src/book.xml"); 27      28         NodeList list = document.getElementsByTagName("书名"); 29         Node node = list.item(1); 30         String content = node.getTextContent(); 31         System.out.println(content); 32          33     } 34      35     @Test 36     public void read2() throws Exception{ 37          38         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 39         DocumentBuilder builder = factory.newDocumentBuilder(); 40         Document document = builder.parse("src/book.xml"); 41      42         //得到根节点 43         Node root = document.getElementsByTagName("书架").item(0); 44         list(root); 45     } 46  47     private void list(Node node) { 48         if(node instanceof Element){ 49         System.out.println(node.getNodeName()); 50         } 51         NodeList list = node.getChildNodes(); 52          53         for(int x=0;x<list.getLength()-1;x++){ 54             Node child = list.item(x); 55             list(child); 56             //System.out.println(child.getTextContent()); 57         } 58          59     } 60      61     //得到xml文档中标签属性值:<书名 name="xxxx">Java就业培训教程</书名> 62     @Test 63     public void read3() throws Exception{ 64          65         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 66         DocumentBuilder builder = factory.newDocumentBuilder(); 67         Document document = builder.parse("src/book.xml"); 68      69         //得到根节点 70         Element bookname = (Element) document.getElementsByTagName("书名").item(0); 71         String value = http://www.mamicode.com/bookname.getAttribute("name"); 72         System.out.println(value); 73     } 74      75     //向xml文档中添加节点:<售价>59.00元</售价> 76     @Test 77     public void add() throws Exception{ 78         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 79         DocumentBuilder builder = factory.newDocumentBuilder(); 80         Document document = builder.parse("src/book.xml"); 81      82         //创建节点 83         Element price =document.createElement("售价"); 84         price.setTextContent("59.00元"); 85          86         //把创建的节点挂到第一本书上 87         Element book = (Element) document.getElementsByTagName("书").item(0); 88         book.appendChild(price); 89          90         //把更新后内存写回xml中 91         TransformerFactory tffactory = TransformerFactory.newInstance(); 92         Transformer tf = tffactory.newTransformer(); 93         tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml"))); 94      95     } 96      97     //向xml文档中指定位置上添加节点:<售价>59.00元</售价> 98     @Test 99     public void add2() throws Exception{100         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();101         DocumentBuilder builder = factory.newDocumentBuilder();102         Document document = builder.parse("src/book.xml");103     104         //创建节点105         Element price =document.createElement("售价");106         price.setTextContent("59.00元");107         108         //得到参考节点109         Element refNode = (Element) document.getElementsByTagName("作者").item(1);110         111         //得到要挂载的节点112         Element book = (Element) document.getElementsByTagName("书").item(1);113         114         //往book节点的指定位置插崽115         book.insertBefore(price, refNode);116         117         //把更新后内存写回xml中118         TransformerFactory tffactory = TransformerFactory.newInstance();119         Transformer tf = tffactory.newTransformer();120         tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml")));121     122     }123     124     125     //向xml文档节点上添加属性:<书名>java就业培训教程</书名>上添加name="zero"属性126     @Test127     public void addAttr() throws Exception{128         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();129         DocumentBuilder builder = factory.newDocumentBuilder();130         Document document = builder.parse("src/book.xml");131     132         Element bookname = (Element) document.getElementsByTagName("书名").item(0);133         bookname.setAttribute("name", "zero");134         135         //把更新后内存写回xml中136         TransformerFactory tffactory = TransformerFactory.newInstance();137         Transformer tf = tffactory.newTransformer();138         tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml")));139     140     }141     142     @Test143     public void delete() throws Exception{144         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();145         DocumentBuilder builder = factory.newDocumentBuilder();146         Document document = builder.parse("src/book.xml");147         148         //得到要删除节点149         Element e = (Element) document.getElementsByTagName("售价").item(1);150         System.out.println(e);151         //得到要删除的节点152         Element book = (Element) document.getElementsByTagName("书").item(1);153         System.out.println(book);154         //父节点删子节点155         book.removeChild(e);156         157         158         //把更新后内存写回xml中159         TransformerFactory tffactory = TransformerFactory.newInstance();160         Transformer tf = tffactory.newTransformer();161         tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml")));162     163     164     }165     166     //delete167     @Test168     public void delete2() throws Exception{169         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();170         DocumentBuilder builder = factory.newDocumentBuilder();171         Document document = builder.parse("src/book.xml");172         173         //得到要删除节点174         Element e = (Element) document.getElementsByTagName("售价").item(1);175         e.getParentNode().getParentNode().removeChild(e.getParentNode());176         177         178         //把更新后内存写回xml中179         TransformerFactory tffactory = TransformerFactory.newInstance();180         Transformer tf = tffactory.newTransformer();181         tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml")));182     183     184     }185     186     //update187     @Test188     public void update() throws Exception{189         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();190         DocumentBuilder builder = factory.newDocumentBuilder();191         Document document = builder.parse("src/book.xml");192         193         Element e = (Element) document.getElementsByTagName("售价").item(1);194         e.setTextContent("168元");195         196         //把更新后内存写回xml中197         TransformerFactory tffactory = TransformerFactory.newInstance();198         Transformer tf = tffactory.newTransformer();199         tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml")));200     201     }202 }
View Code
 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?><书架> 2     <> 3         <书名 name="zero">Java就业培训教程</书名> 4         <售价>59.00元</售价> 5         <作者>张孝祥</作者> 6     </> 7     <> 8         <书名 name="zero">Java就业培训教程</书名> 9         <售价>168元</售价>10         <作者>张孝祥</作者>11     </>12     13 </书架>
View Code