常用类及方法
Document(接口)
表示整个 HTML 或 XML 文档。从概念上讲,它是文档树的根,并提供对文档数据的基本访问。
常用方法
getDocumentElement()
该属性允许直接访问文档的文档元素的子节点。
getElementsByTagName(String tagname)
按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList。
createElement(String a)
创建指定类型元素
DocumentBuilder
使其从 XML 文档获取 DOM 文档实例。使用此类,应用程序员可以从 XML 获取一个 Document。
常用方法
parse(File f)
将给定文件的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象。
DocumentBuilderFactory
定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。
常用方法
newInstence();
获取 DocumentBuilderFactory 的新实例。
newDocumentBuilder()
使用当前配置的参数创建一个新的 DocumentBuilder 实例。
Transformer
此抽象类的实例能够将源树转换为结果树。(修改xml文件后同步用)
可以通过 TransformerFactory.newInstence().newTransformer() 方法获取此类的实例
常用方法
transform(Source xmlSource, Result outputTarget)
将 XML Source 转换为 Result。
eg:newTransformer.transform(new DOMSource(doc), new StreamResult(f));
xmlSource - 要转换的 XML 输入。
outputTarget - 转换 xmlSource 的 Result。
Node
该 Node 接口是整个文档对象模型的主要数据类型。它表示该文档树中的单个节点。
常用方法
appendChild(Node newChild)
将节点 newChild 添加到此节点的子节点列表的末尾。
父节点中新加子节点
import java.beans.XMLDecoder;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.junit.Test;
import org.w3c.dom.Attr;
import org.w3c.dom.Comment;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class text_1 {
public static File f = new File("D:/program/demo/src/contacts.xml");
// public static void main(String[] args) throws Exception {
// text_1();
// text_2(); //查找元素节点
// text_3(); //更改元素的值
// text_4(); //添加新元素
// text_5(); //添加元素属性(id)
// text_6(); //删除某一个元素
// text_7();
// }
@Test
public void testa() throws Exception {
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
doc.setXmlVersion("1.0");
Element root = doc.createElement("content");
Element linkComment = doc.createElement("linklist");
Element nameComment = doc.createElement("name");
Element emailComment = doc.createElement("email");
Element hobbyComment = doc.createElement("hobbay");
nameComment.setTextContent("阿童木");
emailComment.setTextContent("@阿童木.com");
hobbyComment.setTextContent("打架");
linkComment.appendChild(nameComment);
linkComment.appendChild(emailComment);
linkComment.appendChild(hobbyComment);
root.appendChild(linkComment);
doc.appendChild(root);
Transformer transformer = TransformerFactory.
newInstance().newTransformer();
transformer.transform(new DOMSource(doc), new StreamResult( new File("F:/Dom_text.xml")));
}
@Test
public static void text_6() throws Exception {
// TODO Auto-generated method stub
Document element = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);
Element root = element.getDocumentElement();
Element linkel = (Element) root.getElementsByTagName("linkman").item(2);
root.removeChild(linkel);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(element),
new StreamResult(f));
}
@Test
public static void text_5() throws Exception {
//获取文档对象
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().parse(f);
//获取根元素
Element element = doc.getDocumentElement();
//获取到第三个联系人
Element item = (Element) element
.getElementsByTagName("linkman").item(2);
//添加属性
item.setAttribute("id","3");
String id = item.getAttribute("id");
System.out.println(id);
//同步
Transformer transformer = TransformerFactory
.newInstance().newTransformer();
transformer.transform(new DOMSource(doc),
new StreamResult(f));
}
@Test
public static void text_4() throws Exception {
// TODO Auto-generated method stub
//獲取document文件对象
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);
//获取到根元素
Element root = doc.getDocumentElement();
//创建五个新元素
Element linkmanElement = doc.createElement("linkman");
Element nameElement = doc.createElement("name");
Element emailElement = doc.createElement("email");
Element addressElement = doc.createElement("address");
Element groupElement = doc.createElement("group");
//为新元素创建文本
nameElement.setTextContent("第三人称");
emailElement.setTextContent("@qq.com");
addressElement.setTextContent("榆树");
groupElement.setTextContent("软件基地");
//将新元素放到<Linkman>中
linkmanElement.appendChild(nameElement);
linkmanElement.appendChild(emailElement);
linkmanElement.appendChild(addressElement);
linkmanElement.appendChild(groupElement);
//将<linkman>添加到根元素中
root.appendChild(linkmanElement);
//更新数据
Transformer newTransformer = TransformerFactory
.newInstance().newTransformer();
newTransformer.transform(new DOMSource(doc), new StreamResult(f));
}
@Test
public static void text_3() throws Exception {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(f);
//获取根元素
Element element = doc.getDocumentElement();
//获取第二个联系人
Element m = (Element) element.getElementsByTagName("linkman").item(1);
//获取第二个联系人的邮箱
Node item = m.getElementsByTagName("email").item(0);
//修改第二个联系人的邮箱
item.setTextContent("184842@z.com");
//新加一步,同步修改的内容
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(doc), new StreamResult(f));
}
@Test
public static void text_2() throws Exception {
//获取文档对象
DocumentBuilder builder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
Document doc = builder.parse(f);
//获取根元素
Element root = doc.getDocumentElement();
//获取第二个联系人元素
NodeList linkmans = root.getElementsByTagName("linkman");
Element linkmanEl = (Element) linkmans.item(1);
//获取联系人的姓名元素
NodeList namelist = linkmanEl.getElementsByTagName("name");//从父节点出发,调用Linkmanel
Node nameel = namelist.item(0);
//获取姓名元素中的文本
String name = nameel.getTextContent();
System.out.println(name);
}
@Test
public static void text_a() throws Exception {
// TODO Auto-generated method stub
DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = fac.newDocumentBuilder();
Document doc = builder.parse(f);
System.out.println(doc );
}
}