[Java] JAVA操作XML操作类 →→→→→进入此内容的聊天室

来自 , 2019-07-19, 写在 Java, 查看 101 次.
URL http://www.code666.cn/view/7c9d0b1f
  1. import java.io.File;
  2. import java.io.FileNotFoundException;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import org.w3c.dom.*;
  6. import org.xml.sax.SAXException;
  7. import javax.xml.parsers.*;
  8. import javax.xml.transform.*;
  9. import javax.xml.transform.dom.DOMSource;
  10. import javax.xml.transform.stream.*;
  11. import javax.xml.xpath.*;
  12. public class Test {
  13.         public static void main(String[] args) {
  14.         DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
  15.         Element theBook=null, theElem=null, root=null;
  16.         try {
  17.             factory.setIgnoringElementContentWhitespace(true);
  18.            
  19.             DocumentBuilder db=factory.newDocumentBuilder();
  20.             Document xmldoc=db.parse(new File("Test1.xml"));
  21.             root=xmldoc.getDocumentElement();
  22.            
  23.             theBook=(Element) selectSingleNode("/books/book[name='哈里波特']", root);
  24.             System.out.println("--- 查询找《哈里波特》 ----");
  25.             Element nameNode=(Element)theBook.getElementsByTagName("price").item(0);
  26.             String name=nameNode.getFirstChild().getNodeValue();
  27.             System.out.println(name);
  28.             output(theBook);
  29.             System.out.println("=============selectSingleNode(books/book[name='哈里波特'], root)==================");
  30.            
  31.             //--- 新建一本书开始 ----
  32.             theBook=xmldoc.createElement("book");
  33.             theElem=xmldoc.createElement("name");
  34.             theElem.setTextContent("新书");
  35.             theBook.appendChild(theElem);
  36.            
  37.             theElem=xmldoc.createElement("price");
  38.             theElem.setTextContent("20");
  39.             theBook.appendChild(theElem);
  40.             theElem=xmldoc.createElement("memo");
  41.             theElem.setTextContent("新书的更好看。");
  42.             theBook.appendChild(theElem);
  43.             root.appendChild(theBook);
  44.             System.out.println("--- 新建一本书开始 ----");
  45.             output(xmldoc);
  46.             System.out.println("==============================");
  47.            
  48.             //--- 新建一本书完成 ----
  49.             //--- 下面对《哈里波特》做一些修改。 ----
  50.             //--- 查询找《哈里波特》----
  51.            
  52.             //--- 此时修改这本书的价格 -----
  53.             theBook.getElementsByTagName("price").item(0).setTextContent("15");//getElementsByTagName返回的是NodeList,所以要跟上item(0)。另外,getElementsByTagName("price")相当于xpath的".//price"。
  54.             System.out.println("--- 此时修改这本书的价格 ----");
  55.             output(theBook);
  56.             //--- 另外还想加一个属性id,值为B01 ----
  57.             theBook.setAttribute("id", "B01");
  58.             System.out.println("--- 另外还想加一个属性id,值为B01 ----");
  59.             output(theBook);
  60.             //--- 对《哈里波特》修改完成。 ----
  61.             //--- 要用id属性删除《三国演义》这本书 ----
  62.             theBook=(Element) selectSingleNode("/books/book[@id='B02']", root);
  63.             System.out.println("--- 要用id属性删除《三国演义》这本书 ----");
  64.             output(theBook);
  65.             theBook.getParentNode().removeChild(theBook);
  66.             System.out.println("--- 删除后的XML ----");
  67.             output(xmldoc);
  68.             //--- 再将所有价格低于10的书删除 ----
  69.             NodeList someBooks=selectNodes("/books/book[price<10]", root);
  70.             System.out.println("--- 再将所有价格低于10的书删除 ---");
  71.             System.out.println("--- 符合条件的书有 "+someBooks.getLength()+"本。 ---");
  72.             for(int i=0;i<someBooks.getLength();i++) {
  73.                 someBooks.item(i).getParentNode().removeChild(someBooks.item(i));
  74.             }
  75.             output(xmldoc);
  76.             saveXml("Test1_Edited.xml", xmldoc);
  77.         } catch (ParserConfigurationException e) {
  78.             e.printStackTrace();
  79.         } catch (SAXException e) {
  80.             e.printStackTrace();
  81.         } catch (IOException e) {
  82.             e.printStackTrace();
  83.         }
  84.     }
  85.     public static void output(Node node) {//将node的XML字符串输出到控制台
  86.         TransformerFactory transFactory=TransformerFactory.newInstance();
  87.         try {
  88.             Transformer transformer = transFactory.newTransformer();
  89.             transformer.setOutputProperty("encoding", "gb2312");
  90.             transformer.setOutputProperty("indent", "yes");
  91.             DOMSource source=new DOMSource();
  92.             source.setNode(node);
  93.             StreamResult result=new StreamResult();
  94.             result.setOutputStream(System.out);
  95.            
  96.             transformer.transform(source, result);
  97.         } catch (TransformerConfigurationException e) {
  98.             e.printStackTrace();
  99.         } catch (TransformerException e) {
  100.             e.printStackTrace();
  101.         }  
  102.     }
  103.    
  104.     public static Node selectSingleNode(String express, Object source) {//查找节点,并返回第一个符合条件节点
  105.         Node result=null;
  106.         XPathFactory xpathFactory=XPathFactory.newInstance();
  107.         XPath xpath=xpathFactory.newXPath();
  108.         try {
  109.             result=(Node) xpath.evaluate(express, source, XPathConstants.NODE);
  110.         } catch (XPathExpressionException e) {
  111.             e.printStackTrace();
  112.         }
  113.        
  114.         return result;
  115.     }
  116.    
  117.     public static NodeList selectNodes(String express, Object source) {//查找节点,返回符合条件的节点集。
  118.         NodeList result=null;
  119.         XPathFactory xpathFactory=XPathFactory.newInstance();
  120.         XPath xpath=xpathFactory.newXPath();
  121.         try {
  122.             result=(NodeList) xpath.evaluate(express, source, XPathConstants.NODESET);
  123.         } catch (XPathExpressionException e) {
  124.             e.printStackTrace();
  125.         }
  126.        
  127.         return result;
  128.     }
  129.    
  130.     public static void saveXml(String fileName, Document doc) {//将Document输出到文件
  131.         TransformerFactory transFactory=TransformerFactory.newInstance();
  132.         try {
  133.             Transformer transformer = transFactory.newTransformer();
  134.             transformer.setOutputProperty("indent", "yes");
  135.             DOMSource source=new DOMSource();
  136.             source.setNode(doc);
  137.             StreamResult result=new StreamResult();
  138.             result.setOutputStream(new FileOutputStream(fileName));
  139.            
  140.             transformer.transform(source, result);
  141.         } catch (TransformerConfigurationException e) {
  142.             e.printStackTrace();
  143.         } catch (TransformerException e) {
  144.             e.printStackTrace();
  145.         } catch (FileNotFoundException e) {
  146.             e.printStackTrace();
  147.         }  
  148.     }
  149. }
  150.  
  151. XML:
  152. <?xml version="1.0" encoding="GBK"?>
  153. <books>
  154. <book>
  155. <name>哈里波特</name>
  156. <price>10</price>
  157. <memo>这是一本很好看的书。</memo>
  158. </book>
  159. <book id="B02">
  160. <name>三国演义</name>
  161. <price>10</price>
  162. <memo>四大名著之一。</memo>
  163. </book>
  164. <book id="B03">
  165. <name>水浒</name>
  166. <price>6</price>
  167. <memo>四大名著之一。</memo>
  168. </book>
  169. <book id="B04">
  170. <name>红楼</name>
  171. <price>5</price>
  172. <memo>四大名著之一。</memo>
  173. </book>
  174. </books> //源代码片段来自云代码http://yuncode.net
  175.                        

回复 "JAVA操作XML操作类"

这儿你可以回复上面这条便签

captcha