最近工作涉及到对xml文件的操作,记点心得。
java可以有四种方法操作xml文件,我采用了dom方式,跟js中对html元素的操作有些类似。
用到的jar包:http://download.csdn.net/detail/sdsky1987/4083634
读取xml文件:
1
2
3
|
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
org.w3c.dom.Document document = db.parse(
"c:\\test.xml"
);
|
增加节点root并赋属性code, locale, version。添加子节点child, 并为子节点赋值"text":
1
2
3
4
5
6
7
8
9
10
|
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取出来的是一个节点数组):
1
2
3
4
5
6
|
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"(标签对里面的内容):
1
2
3
4
5
|
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:
1
2
3
4
5
6
7
|
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:
1
2
3
4
5
6
7
8
9
10
|
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);
|