Java操作XML文件大合集(增删改查)

来源:互联网 发布:九维外呼软件 编辑:程序博客网 时间:2024/05/16 10:11
package wzs;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  XMLWriter{    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("MyXml.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)。另外,getElementsByTagName("price")相当于xpath 的".//price"。            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", "utf-8");            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();        }       }}
复制代码
复制代码
<?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>
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 驾驶本扣9分后怎么办 b1照扣12分怎么办 b2扣了15分怎么办 b2有扣分未年审怎么办 b2驾驶证扣4分怎么办 b2驾驶证扣10分怎么办 刚发驾驶证照片太丑想换怎么办! 考驾照时户口变更怎么办 驾照年审色盲未过怎么办 考驾驶证互联网注册号码怎么办 驾驶证体检视力不过关怎么办 六年驾照满了怎么办 驾照扣了40多分怎么办 一个驾照扣24分怎么办 南昌电动车牌照丢了怎么办 上海餐饮工作人员怎么办健康证 房产过户没有遗嘱公证怎么办 在外地被扣12分怎么办 公务员体检视力不过关怎么办弱视 身份证被盗用注册公司怎么办 驾照分卖了12分怎么办 一年12分扣完了怎么办 滴滴车管所信息不同步怎么办 驾驶证过期两个月了怎么办 科目二考试第一次不合格怎么办 科目二不想考了怎么办 科二有事考不了怎么办 科四有事去不了怎么办 社保卡发了密码怎么办 不知道社保卡号怎么办 科目三未到30天怎么办 户口地址变了驾照怎么办 拿了驾照没开车怎么办 免检的车在外地怎么办 2018年b2证扣3分怎么办 科一考试没去怎么办 上海房子卖了户口怎么办 贷款买房买房人不是贷款人怎么办 行驶证驾驶证都遗失了怎么办 c1增驾b2没考过怎么办 没驾照买车怎么办行驶证