xml 文件
employer.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<employee>
<employer email="LiMing@126.com">
<name>LiMIng</name>
<sex>M</sex>
<age>30</age>
</employer>
<employer email="Kate55@hotmail.com">
<name>Kate</name>
<sex>F</sex>
<age>28</age>
</employer>
</employee>
java 代码
XmlParser.java
package XmlParser;
/*
* Date 2014.02.20
* referrece
* ahtor:璀若星辰
*/
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
public class XmlParser {
private Document doc;
private String path;
//读入一个XML文档,首先要一个DocumentBuilder对象
public XmlParser(String path){
this.path = path;
//实例化一个文档构建器工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try{
//通过文档构建器工厂获取一个文档构建器
DocumentBuilder builder = factory.newDocumentBuilder();
//通过文档构建器构建一个文档实例
this.doc = builder.parse(path);
}catch(Exception e){
e.printStackTrace();
}
}
public void parseEx(){
NodeList n1 = doc.getElementsByTagName("employer");
System.out.println(n1.getLength());
for (int i = 0;i < n1.getLength(); i++ ){
Node n = n1.item(i);
System.out.println("n="+n);
//获取 n 节点下所有的子节点。此处值得注意,在DOM解析时会将所有回车都视为 n 节点的子节点。
//排除回车
if(n instanceof Text){
continue;
}
parseEmployer((Element)n);
}
}
//获取value 和 text 方法
public void parseEmployer(Element e){
String email = e.getAttribute("email");
System.out.println("email="+email);
String name = getChildInnerText(e, "name");
System.out.println("name="+name);
String age = getChildInnerText(e, "age");
System.out.println("age="+age);
}
//获取子节点方法
public Element getChild(Element e,String tagName){
return (Element) e.getElementsByTagName(tagName).item(0);
}
//获取节点文本内容方法
public String getChildInnerText(Element e,String childTagName){
return e.getElementsByTagName(childTagName).item(0).getTextContent();
}
//添加节点
public void addNode(){
Text text = doc.createTextNode(" ");
Text newline = doc.createTextNode("\n");
Element ele = doc.createElement("employer");
ele.setAttribute("email","Java@Sun.com" );
ele.setAttribute("password", "123");
ele.setTextContent("xml文件");
Element ele2 = doc.createElement("name");
ele2.setTextContent("BIll");
Node n = doc.getElementsByTagName("employee").item(0);
n.appendChild(text);
n.appendChild(ele);
n.appendChild(newline);
n.appendChild(ele2);
saveXml();
System.out.println("save success");
}
//同理删除节点 同添加节点但调用removeChild
//保存方法
private void saveXml() {
try {
TransformerFactory tFactory =TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(path));
transformer.transform(source, result);
} catch (Exception e) {
e.getStackTrace();
}
}
public static void main(String[] args) {
XmlParser xp = new XmlParser("D:\\pleiades4.2\\pleiades\\eclipse\\workspace\\Test_knowledge\\JavaSource\\XmlParser\\employer.xml");
xp.parseEx();
xp.addNode();
}
}