对与DOM来说 ,一切都是节点Node;
②Document可以看成一个节点,Element可以看成一个节点,Text可以看成一个节点,
封装出来的对象都可以看成节点Node;
③在JDK中,Node是Doucument(文档),Element(标签元素),Text(文本对象), Attr(属性对象)的父接口;
原生API解析XML
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("C:\Users\Administrator\eclipse-workspace\day35\ghhj\contacts.xml");
Element contact= doc.getDocumentElement();//根元素
NodeList names = contact.getElementsByTagName("name");
Element name = (Element) names.item(1);
System.out.println(name.getTextContent());
或 NodeList linkmans = doc.getElementsByTagName("linkman");
linkmans.item(1).getElementsByTagName("name");
Element linkman = (Element) linkmans.item(1);
2 把第一个联系人的邮箱改掉
public void modify()throws Exception {
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("C:\Users\Administrator\eclipse-workspace\day35\ghhj\contacts.xml");
Element contact= doc.getDocumentElement();//根元素
Element contact = doc.getDocumentElement();
Element linkman = (Element) (contact.getElementsByTagName("linkman").item(0));
Element email= (Element)(linkman.getElementsByTagName("email").item(0));
email.setTextContent("110110@qq.com");
/////使用TransFormer类 把 内存中的数据 同步到xml里面去;
Transformer trant = TransformerFactory.newInstance().newTransformer();
Source source = new DOMSource(doc);
Result result= new StreamResult(new File("G:\EclipseWorkSpace\testXml\src\com\cj\JAXP\contacts.xml"));
trant.transform(source,result);
}
//添加一个联系人信息
@Test
public void add()throws Exception {
//拿到document对象
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("G:\EclipseWorkSpace\testXml\src\com\cj\JAXP\contacts.xml"));
//获取根节点元素
Element contact = doc.getDocumentElement();
//创建所有节点对象
Element linkman = doc.createElement("linkman");
Element name = doc.createElement("name");
name.setTextContent("李四");
Element email = doc.createElement("email");
email.setTextContent("110@qq.com");
Element address = doc.createElement("address");
address.setTextContent("安徽省");
Element group = doc.createElement("group");
group.setTextContent("111111");
//将子标签添加到linkman标签内
linkman.appendChild(name);
linkman.appendChild(email);
linkman.appendChild(address);
linkman.appendChild(group);
//将liakman添加到contact标签内
contact.appendChild(linkman);
//执行doc对象与xml文件同步
//1.获取Transformer对象
Transformer trant = TransformerFactory.newInstance().newTransformer();
//2.创建Source对象(绑定doc对象)和Result对象(绑定文件对象)
Source xmlSource = new DOMSource(doc);
Result outputTarget = new StreamResult(new File("G:\EclipseWorkSpace\testXml\src\com\cj\JAXP\contacts.xml"));
//3.将doc对象同步到xml文件中
trant.transform(xmlSource, outputTarget);
}
// 删除第三个联系人;
@Test
public void delete()throws Exception {
//拿到document对象
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("G:\EclipseWorkSpace\testXml\src\com\cj\JAXP\contacts.xml"));
//获取根节点元素
Element contact = doc.getDocumentElement();
//获取所有linkman元素
NodeList linkmans = contact.getElementsByTagName("linkman");
//将contact的第三个子节点(linkman)删除
contact.removeChild(linkmans.item(2));
//执行doc对象与xml文件同步
//1.获取Transformer对象
Transformer trant = TransformerFactory.newInstance().newTransformer();
//2.创建Source对象(绑定doc对象)和Result对象(绑定文件对象)
Source xmlSource = new DOMSource(doc);
Result outputTarget = new StreamResult(new File("G:\EclipseWorkSpace\testXml\src\com\cj\JAXP\contacts.xml"));
//3.将doc对象同步到xml文件中
trant.transform(xmlSource, outputTarget);
}
}