DOM Document Object Model 文档对象模型

 

如果一个程序需要进行DOM解析读操作的话,需要按照如下的步骤进行

建立DocumentBuilderFactory DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();

   建立DocumentBuilder DocumentBuilder builder = factory.newDocumentBuilder();

   建立Document Document doc = builder.parse("要读取的文件路径");

   建立NodeList NodeList nl = doc.getElementsByTagName("读取节点");

   进行xml信息读取。

 

要解析文件——d:\dom_demo_02.xml


<?xml version="1.0" encoding="GBK"?> <addresslist> <name>张三</name> </addresslist>


 

读取结点: 

public class DOMDemo01 {
public static void main(String[] args) {
// 1、建立DocumentBuilderFactory,以用于取得DocumentBuilder
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2、通过DocumentBuilderFactory取得DocumentBuilder
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
// 3、定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作
Document doc = null;
try {
// 读取指定路径的xml文件
doc = builder.parse("D:" + File.separator + " dom_demo_02.xml");
} catch (Exception e) {
e.printStackTrace();
}
// 4、查找name的节点
NodeList nl = doc.getElementsByTagName("name");
// 5、输出NodeList中第一个子节点中文本节点的内容
System.out.println("姓名:" + nl.item(0).getFirstChild().getNodeValue());
}
}

 

定义要解析的XML文件  d:\dom_demo_02.xml:


<?xml version="1.0" encoding="GBK"?> <addresslist> <linkman> <name>张三</name> <email>mldnqa@163.com</email> </linkman> <linkman> <name>MLDN</name> <email>mldnkf@163.com</email> </linkman> </addresslist>


 

public class DOMDemo01 {
public static void main(String[] args) {
// 1、建立DocumentBuilderFactory,以用于取得DocumentBuilder
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2、通过DocumentBuilderFactory取得DocumentBuilder
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
// 3、定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作
Document doc = null;
try {
// 读取指定路径的xml文件
doc = builder.parse("D:" + File.separator + " dom_demo_02.xml");
} catch (Exception e) {
e.printStackTrace();
}
// 4、查找linkman的节点
NodeList nl = doc.getElementsByTagName("linkman");
// 5、输出NodeList中第一个子节点中文本节点的内容
for (int x = 0; x < nl.getLength(); x++) { // 循环输出节点内容
Element e = (Element) nl.item(x) ;// 取得每一个元素
System.out.println("姓名:" + e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
System.out.println("邮箱:" + e.getElementsByTagName("email").item(0).getFirstChild().getNodeValue());
}
}
}

 

生成XML文件:

public class DOMDemo01 {
public static void main(String[] args) {
// 1、建立DocumentBuilderFactory,以用于取得DocumentBuilder
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2、通过DocumentBuilderFactory取得DocumentBuilder
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
// 3、定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作
Document doc = null;
doc = builder.newDocument(); // 创建一个新的文档
// 4、建立各个操作节点
Element addresslist = doc.createElement("addresslist") ;// 建立节点
Element linkman = doc.createElement("linkman") ; // 建立节点
Element name = doc.createElement("name") ; // 建立节点
Element email = doc.createElement("email") ; // 建立节点
// 5、设置节点的文本内容,即:为每一个节点添加文本节点
name.appendChild(doc.createTextNode("张三")) ; // 设置文本
email.appendChild(doc.createTextNode("mldnqa@163.com")) ;// 设置文本
// 6、设置节点关系
linkman.appendChild(name) ; // 子节点
linkman.appendChild(email) ; // 子节点
addresslist.appendChild(linkman) ; // 子节点
doc.appendChild(addresslist) ; // 文档上保存节点
// 7、输出文档到文件之中
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = null;
t = tf.newTransformer();
t.setOutputProperty(OutputKeys.ENCODING, "GBK") ; // 设置编码
DOMSource source = new DOMSource(doc); // 输出文档
StreamResult result = new StreamResult(new File("d:" + File.separator
+ "output.xml")); // 指定输出位置
t.transform(source, result);
}
}