最近工做涉及到对xml文件的操做,记点心得。html
java能够有四种方法操做xml文件,我采用了dom方式,跟js中对html元素的操做有些相似。java
用到的jar包:http://download.csdn.net/detail/sdsky1987/4083634node
读取xml文件:数组
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); org.w3c.dom.Document document = db.parse("c:\\test.xml");
增长节点root并赋属性code, locale, version。添加子节点child, 并为子节点赋值"text":app
org.w3c.dom.Element root = document.createElement("root"); root.setAttribute("code", code); root.setAttribute("locale", locale); root.setAttribute("version", getCapVersion()); document.appendChild(root); org.w3c.dom.Element child = document.createElement("child"); Text nameValue = doc.createTextNode("text"); root.appendChild(child); child.appendChild(value);
修改第一个root节点的属性值code为"code modified"(注:getElementsByTagName取出来的是一个节点数组):dom
NodeList nodelList = document.getElementsByTagName("root"); Element element = (Element) nodeList.item(0); String code = element.getAttribute("code"); if(code != null){ element.setAttribute("code", "code modified"); }
修改全部child节点的值为"new text"(标签对里面的内容):ui
NodeList nodeList = document.getElementsByTagName("child"); for(int i = 0; i < nodeList.getLength(); i++){ Element element = (Element) nodeList.item(i); element.setTextContent("new text"); }
删除root节点属性locale,删除子节点child:编码
NodeList nodeList = document.getElementsByTagName("root"); for(int i = 0; i < nodeList.getLength(); i++){ Element element = (Element) nodeList.item(i); element.removeAttribute("locale"); NodeList childNodeList = element.getElementsByTagName("child"); nodeList.removeChild(childNodeList.item(0)); }
最后做完修改,别忘记保存test.xml:.net
TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource domsource = new DOMSource(document); //设置编码,换行,缩进 transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); t.setOutputProperty(OutputKeys.INDENT,"yes"); t.setOutputProperty(OutputKeys.METHOD, "xml"); //保存xml StreamResult result = new StreamResult("C:\\test.xml"); transformer.transform(domsource, result);