使用Java怎么对XML文件进行增删改查操作
作者
使用Java怎么对XML文件进行增删改查操作?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
xml文件:
<?xmlversion="1.0"encoding="UTF-8"?> <books> <book> <name>哈里波特</name> <price>10</price> <memo>这是一本很好看的书。</memo> </book> <bookid="B02"> <name>三国演义</name> <price>10</price> <memo>四大名著之一。</memo> </book> <bookid="B03"> <name>水浒</name> <price>6</price> <memo>四大名著之一。</memo> </book> <bookid="B04"> <name>红楼</name> <price>5</price> <memo>四大名著之一。</memo> </book> </books>
增删改查 Test.java
importjava.io.File; importjava.io.FileOutputStream; importorg.w3c.dom.*; importjavax.xml.parsers.*; importjavax.xml.transform.*; importjavax.xml.transform.dom.DOMSource; importjavax.xml.transform.stream.*; importjavax.xml.xpath.*; publicclassTest{ publicstaticvoidmain(String[]args){ DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance(); ElementtheBook=null,theElem=null,root=null; try{ factory.setIgnoringElementContentWhitespace(true); DocumentBuilderdb=factory.newDocumentBuilder(); Documentxmldoc=(Document)db.parse(newFile("Test.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的书删除---- NodeListsomeBooks=selectNodes("/books/book[price<10]",root); System.out.println("---再将所有价格低于10的书删除---"); System.out.println("---符合条件的书有 "+someBooks.getLength() +"本。---"); for(inti=0;i<someBooks.getLength();i++){ someBooks.item(i).getParentNode().removeChild(someBooks.item(i)); } output(xmldoc); saveXml("Test1_Edited.xml",xmldoc); }catch(Exceptione){ e.printStackTrace(); } } /** *将node的XML字符串输出到控制台 * *@paramnode */ publicstaticvoidoutput(Nodenode){ TransformerFactorytransFactory=TransformerFactory.newInstance(); try{ Transformertransformer=transFactory.newTransformer(); transformer.setOutputProperty("encoding","gb2312"); transformer.setOutputProperty("indent","yes"); DOMSourcesource=newDOMSource(); source.setNode(node); StreamResultresult=newStreamResult(); result.setOutputStream(System.out); transformer.transform(source,result); }catch(Exceptione){ e.printStackTrace(); } } /** *查找节点,并返回第一个符合条件节点 * *@paramexpress *@paramsource *@return */ publicstaticNodeselectSingleNode(Stringexpress,Objectsource){ Noderesult=null; XPathFactoryxpathFactory=XPathFactory.newInstance(); XPathxpath=xpathFactory.newXPath(); try{ result=(Node)xpath.evaluate(express,source,XPathConstants.NODE); }catch(XPathExpressionExceptione){ e.printStackTrace(); } returnresult; } /** *查找节点,返回符合条件的节点集。 *@paramexpress *@paramsource *@return */ publicstaticNodeListselectNodes(Stringexpress,Objectsource){ NodeListresult=null; XPathFactoryxpathFactory=XPathFactory.newInstance(); XPathxpath=xpathFactory.newXPath(); try{ result=(NodeList)xpath.evaluate(express,source, XPathConstants.NODESET); }catch(XPathExpressionExceptione){ e.printStackTrace(); } returnresult; } /** *将Document输出到文件 *@paramfileName *@paramdoc */ publicstaticvoidsaveXml(StringfileName,Documentdoc){ TransformerFactorytransFactory=TransformerFactory.newInstance(); try{ Transformertransformer=transFactory.newTransformer(); transformer.setOutputProperty("indent","yes"); DOMSourcesource=newDOMSource(); source.setNode(doc); StreamResultresult=newStreamResult(); result.setOutputStream(newFileOutputStream(fileName)); transformer.transform(source,result); }catch(Exceptione){ e.printStackTrace(); } } }
关于使用Java怎么对XML文件进行增删改查操作问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。
目录
推荐阅读
0 条评论
本站已关闭游客评论,请登录或者注册后再评论吧~