最近工作涉及到对xml文件的操作,记点心得。
java可以有四种方法操作xml文件,我采用了dom方式,跟js中对html元素的操作有些类似。
读取xml文件:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
org.w3c.dom.Document document = db.parse("c:\\test.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":
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);
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取出来的是一个节点数组):
NodeList nodelList = document.getElementsByTagName("root");
Element element = (Element) nodeList.item(0);
String code = element.getAttribute("code");
if(code != null){
element.setAttribute("code", "code modified");
}
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"(标签对里面的内容):
NodeList nodeList = document.getElementsByTagName("child");
for(int i = 0; i < nodeList.getLength(); i++){
Element element = (Element) nodeList.item(i);
element.setTextContent("new text");
}
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));
}
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:
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);
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);