最近工作涉及到对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);