zoukankan      html  css  js  c++  java
  • JAVA操作XML的完整例子

    JAVA操作XML的完整例子——W3C DOM篇

    这是一个用JAVA W3C DOM 进行XML的的例子,包含了查询、增加、修改、删除、保存的基本操作。较完整的描述了一个XML的整个操作流程。适合刚入门JAVA XML操作的朋友参考和学习。

    假设有XML文件:test1.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <books>
     <book>
      <name>哈里波特</name>
      <price>10</price>
      <memo>这是一本很好看的书。</memo>
     </book>
     <book id="B02">
      <name>三国演义</name>
      <price>10</price>
      <memo>四大名著之一。</memo>
     </book>
     <book id="B03">
      <name>水浒</name>
      <price>6</price>
      <memo>四大名著之一。</memo>
     </book>
     <book id="B04">
      <name>红楼</name>
      <price>5</price>
      <memo>四大名著之一。</memo>
     </book>
    </books> 

    下面是为Test.java

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;

    import org.w3c.dom.*;
    import org.xml.sax.SAXException;

    import javax.xml.parsers.*;
    import javax.xml.transform.*;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.*;
    import javax.xml.xpath.*;

    public class Test ...{
        public static void main(String[] args) ...{
            DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
            Element theBook=null, theElem=null, root=null;
            try ...{
                factory.setIgnoringElementContentWhitespace(true);
               
                DocumentBuilder db=factory.newDocumentBuilder();
                Document xmldoc=db.parse(new File("Test1.xml"));
                root=xmldoc.getDocumentElement();
               
                //---  新建一本书开始 ----
                theBook=xmldoc.createElement("book");
                theElem=xmldoc.createElement("name");
                theElem.setTextContent("新书");
                theBook.appendChild(theElem);
               
                theElem=xmldoc.createElement("price");
                theElem.setTextContent("20");
                theBook.appendChild(theElem);

                theElem=xmldoc.createElement("memo");
                theElem.setTextContent("新书的更好看。");
                theBook.appendChild(theElem);
                root.appendChild(theBook);
                System.out.println("---  新建一本书开始 ----");
                output(xmldoc);
                //---  新建一本书完成 ----

                //---  下面对《哈里波特》做一些修改。 ----
                //---  查询找《哈里波特》----
                theBook=(Element) selectSingleNode("/books/book[name=''哈里波特'']", root);
                System.out.println("---  查询找《哈里波特》 ----");
                output(theBook);
                //---  此时修改这本书的价格 -----
                theBook.getElementsByTagName("price").item(0).setTextContent("15");//getElementsByTagName返回的是NodeList,所以要跟上item(0)
                System.out.println("---  此时修改这本书的价格 ----");
                output(theBook);
                //---  另外还想加一个属性id,值为B01 ----
                theBook.setAttribute("id", "B01");
                System.out.println("---  另外还想加一个属性id,值为B01 ----");
                output(theBook);
                //---  对《哈里波特》修改完成。 ----

                //---  要用id属性删除《三国演义》这本书  ----
                theBook=(Element) selectSingleNode("/books/book[@id=''B02'']", root);
                System.out.println("---  要用id属性删除《三国演义》这本书 ----");
                output(theBook);
                theBook.getParentNode().removeChild(theBook);
                System.out.println("---  删除后的XML ----");
                output(xmldoc);

                //---  再将所有价格低于10的书删除  ----
                NodeList someBooks=selectNodes("/books/book[price<10]", root);
                System.out.println("---  再将所有价格低于10的书删除  ---");
                System.out.println("---  符合条件的书有 "+someBooks.getLength()+"本。  ---");
                for(int i=0;i<someBooks.getLength();i++) ...{
                    someBooks.item(i).getParentNode().removeChild(someBooks.item(i));
                }
                output(xmldoc);

                saveXml("Test1_Edited.xml", xmldoc);
            } catch (ParserConfigurationException e) ...{
                e.printStackTrace();
            } catch (SAXException e) ...{
                e.printStackTrace();
            } catch (IOException e) ...{
                e.printStackTrace();
            }
        }

        public static void output(Node node) ...{//将node的XML字符串输出到控制台
            TransformerFactory transFactory=TransformerFactory.newInstance();
            try ...{
                Transformer transformer = transFactory.newTransformer();
                transformer.setOutputProperty("encoding", "gb2312");
                transformer.setOutputProperty("indent", "yes");

                DOMSource source=new DOMSource();
                source.setNode(node);
                StreamResult result=new StreamResult();
                result.setOutputStream(System.out);
               
                transformer.transform(source, result);
            } catch (TransformerConfigurationException e) ...{
                e.printStackTrace();
            } catch (TransformerException e) ...{
                e.printStackTrace();
            }  
        }
       
        public static Node selectSingleNode(String express, Object source) ...{//查找节点,并返回第一个符合条件节点
            Node result=null;
            XPathFactory xpathFactory=XPathFactory.newInstance();
            XPath xpath=xpathFactory.newXPath();
            try ...{
                result=(Node) xpath.evaluate(express, source, XPathConstants.NODE);
            } catch (XPathExpressionException e) ...{
                e.printStackTrace();
            }
           
            return result;
        }
       
        public static NodeList selectNodes(String express, Object source) ...{//查找节点,返回符合条件的节点集。
            NodeList result=null;
            XPathFactory xpathFactory=XPathFactory.newInstance();
            XPath xpath=xpathFactory.newXPath();
            try ...{
                result=(NodeList) xpath.evaluate(express, source, XPathConstants.NODESET);
            } catch (XPathExpressionException e) ...{
                e.printStackTrace();
            }
           
            return result;
        }
       
        public static void saveXml(String fileName, Document doc) ...{//将Document输出到文件
            TransformerFactory transFactory=TransformerFactory.newInstance();
            try ...{
                Transformer transformer = transFactory.newTransformer();
                transformer.setOutputProperty("indent", "yes");

                DOMSource source=new DOMSource();
                source.setNode(doc);
                StreamResult result=new StreamResult();
                result.setOutputStream(new FileOutputStream(fileName));
               
                transformer.transform(source, result);
            } catch (TransformerConfigurationException e) ...{
                e.printStackTrace();
            } catch (TransformerException e) ...{
                e.printStackTrace();
            } catch (FileNotFoundException e) ...{
                e.printStackTrace();
            }  
        }
    }

    文章出处:http://www.diybl.com/course/3_program/java/javashl/200833/102631.html

  • 相关阅读:
    N皇后求解。万万没想到,只用一个一维数组就搞定了。还体现了回溯。
    图的存储与实现(一),使用邻接矩阵
    201671010139 2016-2017-2 《Java程序设计》关于java的初学体验总结
    题目常用解法
    【问题】如何批量导出AI文件里内嵌的图片
    安全算法基础(一)
    对安全的认知
    6月
    渗透--还是tp
    c++学习————VC报错解决方案(vc2013)
  • 原文地址:https://www.cnblogs.com/im/p/1294023.html
Copyright © 2011-2022 走看看