1. Notes.
2. Các APIs để tìm đến một item trong một XML Document.
3. Các APIs để thay đổi nội dung của một XML Document.
II. Chi tiết.
1. Notes.
- Các Node khác nhau trong một DOM Tree là:
+ Document.
+ Document Fragment.
+ Document Type.
+ Processing Instruction.
- Tạo một Node.
Ta có thể dùng đối tượng Document để tạo một node mới và gắn nó vào bất kì vị trí nào mà ta muốn gắn bằng 2 phương thức này:
document.createElement(String);
document.createElementNS(String1,String2)
- Thay đổi Node.
Node interface cung cấp các phương thức cho việc thay đổi một DOM Tree.
+ getParentNode(); lấy về node cha của node hiện thời.
+ getChildNoes(); lấy về các node con của node hiện thời.
+ insertBefore(); chèn vào trước node hiện thời một node mới.
+ replaceChild(); thay thế một node con nào đó của node hiện thời.
+ removeChild(); xoá bỏ node con của node hiện thời.
+ appendChild(); thêm vào cuối nhất một node mới so với node hiện thời.
- Tìm đến một Node nào đó.
+ getParentNode()........................... Lấy về node cha của node hiện thời
+ getChildNoes()...............................Lấy về các node con của node hiện thời.
+ getFirstChild().................................Lấy về node con đầu tiên so với node hiện thời.
+ getLastChild()..................................Lấy về node cuối cùng so với node hiện thời.
+getNodeName..................................Lấy về tên của node.
- Tìm đến một Element.
+ getElementByTagName().....................................Lấy về element qua tên.
+ getElementByTagNameNS(ns,name).................Lấy về danh sách của tất cả các elements cùng với tên được chỉ định và namespace.
+ getTagName().........................................................Lấy về tên của thẻ.
+ getAttributeNode.....................................................Lấy về giá trị của thuộc tính của node.
- Thay đổi tài liệu.
Interface Document cung cấp 2 phương thức để thay đổi một tài liêu là:
+ createDocumentFragment().
+ ceateCDATASection().
- Thay đổi một element hay một thuộc tính (Attribute).
+ removeAttribute()..............Xoá bỏ thuộc tính.
+ removeAttributeNode......Xoá bỏ thuộc tính của một Node.
+ setAttributeNode()............Cài thuộc tính cho node.
+ setValue().
+setNodeValue..................Cài giá trị cho Node.
Demo.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package usingdom;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
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.xml.sax.SAXException;
/**
*
* @author Nguyen Minh An
*/
public class UsingDOM {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Document d = createDocument();
saveToXmlFile(d, "D:\\NetBean\\UsingDOM\\src\\user.xml");
//read("D:\\NetBean\\UsingDOM\\src\\user.xml");
deleteNode("D:\\NetBean\\UsingDOM\\src\\user.xml");
}
private static Document createDocument() {
try {
//Create Document
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element root = document.createElement("users");
document.appendChild(root);
for (int i = 0; i < 10; i++) {
//tao ra mot the element
Element user = document.createElement("user");
//tao ra the con la username
Element username = document.createElement("username");
//
username.appendChild(document.createTextNode("user" + i));
Element password = document.createElement("password");
password.appendChild(document.createTextNode("pw" + i));
String is = "" + i;
user.setAttribute("id", is);
//user.setTextContent("Tao la an");
//user.setNodeValue("ha ha ha");
//user.appendChild(document.createTextNode("textnode"));
user.appendChild(username);
user.appendChild(password);
root.appendChild(user);
}
return document;
} catch (ParserConfigurationException ex) {
Logger.getLogger(UsingDOM.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
private static void saveToXmlFile(Document document, String fileName) {
try {
//Building transformer
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
StreamResult result = new StreamResult(fileName);
DOMSource source = new DOMSource(document);
transformer.transform(source, result);
} catch (TransformerException ex) {
System.out.println("Khong loi");
}
}
private static void update(String fileName) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = factory.newDocumentBuilder();
Document document = parser.parse(fileName);
Node root = document.getFirstChild();
//Create a node of user
Element element = document.createElement("user");
element.setAttribute("username", "c1010i");
element.setAttribute("password", "c1010i");
element.setAttribute("roles", "admin");
root.appendChild(element);
//saveToXmlFile(document, "updated " + fileName);
} catch (SAXException | IOException | ParserConfigurationException ex) {
Logger.getLogger(UsingDOM.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
*
* @param fileName
*/
private static void deleteNode(String fileName) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = factory.newDocumentBuilder();
Document document = parser.parse(fileName);
//Locate the node to delete
NodeList nodeList = document.getElementsByTagName("user");
Node node = null;
for (int i = 0; i < nodeList.getLength(); i++) {
if ("5".equals(nodeList.item(i).getAttributes().getNamedItem("id").getNodeValue())) {
node = nodeList.item(i);
break;
}
}
Node parentNode = node.getParentNode();
parentNode.removeChild(node);
saveToXmlFile(document, "deleted " + fileName);
} catch (SAXException | IOException | ParserConfigurationException ex) {
Logger.getLogger(UsingDOM.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static boolean read(String filename) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(filename);
NodeList usernames = document.getElementsByTagName("user");
for (int i = 0; i < usernames.getLength(); i++) {
System.out.println(usernames.item(i).getNodeName());
System.out.println(usernames.item(i).getAttributes().getNamedItem("id").getNodeValue());
}
return true;
} catch (SAXException | IOException | ParserConfigurationException ex) {
Logger.getLogger(UsingDOM.class.getName()).log(Level.SEVERE, null, ex);
}
return false;
}
}
Module1_Practice
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package module1_jaxp;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
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.NodeList;
import org.xml.sax.SAXException;
/**
*
* @author Nguyen Minh An
*/
public class Module1_JAXP {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Document document = createStudentFile();
boolean res = saveToFile(document, "D:\\NetBean\\Module1_JAXP\\src\\student.xml");
if (res == true) {
System.out.println("ok");
} else {
System.out.println("error");
}
System.out.println(count());
}
public static int count() {
int count = 0;
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("D:\\NetBean\\Module1_JAXP\\src\\student.xml");
NodeList nl = document.getElementsByTagName("Student");
for (int i = 0; i < nl.getLength(); i++) {
count++;
}
return count;
} catch (SAXException ex) {
Logger.getLogger(Module1_JAXP.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Module1_JAXP.class.getName()).log(Level.SEVERE, null, ex);
} catch (ParserConfigurationException ex) {
Logger.getLogger(Module1_JAXP.class.getName()).log(Level.SEVERE, null, ex);
}
return 0;
}
public static boolean saveToFile(Document document, String filename) {
try {
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
StreamResult sr = new StreamResult(filename);
DOMSource ds = new DOMSource(document);
transformer.transform(ds, sr);
return true;
} catch (TransformerException ex) {
Logger.getLogger(Module1_JAXP.class.getName()).log(Level.SEVERE, null, ex);
}
return false;
}
public static Document createStudentFile() {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element root = document.createElement("StudentList");
document.appendChild(root);
for (int i = 0; i < 20; i++) {
Element student = document.createElement("Student");
Element name = document.createElement("Name");
name.appendChild(document.createTextNode("nguyen van" + i));
student.appendChild(name);
root.appendChild(student);
}
return document;
} catch (ParserConfigurationException ex) {
Logger.getLogger(Module1_JAXP.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
}
source code
Practise_Module4.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package module_4;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
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.NodeList;
import org.xml.sax.SAXException;
/**
*
* @author Nguyen Minh An
*/
public class Module_4 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Document document = createStudentFile();
boolean res = saveToFile(document, "D:\\NetBean\\Module_4\\src\\Employee.xml");
if (res) {
System.out.println("Thanh cong");
} else {
System.out.println("Loi");
}
getName("D:\\NetBean\\Module_4\\src\\Employee.xml");
}
public static boolean saveToFile(Document document, String filename) {
try {
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
StreamResult sr = new StreamResult(filename);
DOMSource ds = new DOMSource(document);
transformer.transform(ds, sr);
return true;
} catch (TransformerException ex) {
Logger.getLogger(Module_4.class.getName()).log(Level.SEVERE, null, ex);
}
return false;
}
public static void getName(String filename) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(filename);
NodeList nl = document.getElementsByTagName("Name");
for (int i = 0; i < nl.getLength(); i++) {
//String name = nl.item(i).getAttributes().getNamedItem("Address").getNodeValue();
//System.out.println(name); //list.add(name);
//System.out.println(nl.item(i).getNodeValue());
System.out.println(nl.item(i).getTextContent());
}
} catch (SAXException | IOException | ParserConfigurationException ex) {
Logger.getLogger(Module_4.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static Document createStudentFile() {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element root = document.createElement("EmployeeList");
document.appendChild(root);
for (int i = 0; i < 20; i++) {
Element student = document.createElement("Employee");
Element name = document.createElement("Name");
name.appendChild(document.createTextNode("nguyen van" + i));
Element diachi = document.createElement("Address");
diachi.appendChild(document.createTextNode("address" + 1));
student.appendChild(name);
student.appendChild(diachi);
root.appendChild(student);
}
return document;
} catch (ParserConfigurationException ex) {
Logger.getLogger(Module_4.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
}
Không có nhận xét nào:
Đăng nhận xét