Lập trình XML với Java

Java hỗ trợ 2 loại xml parser:

 Tree Parser - DOM Parser: phân tích nội

dung tài liệu XML theo mô hình cây phân cấp

 Streaming Parser - SAX Parser ( Simple API

for XML ), StAX Parser: phát sinh các sự kiện

trong quá trình duyệt tài liệu Xml

pdf43 trang | Chuyên mục: XML | Chia sẻ: dkS00TYs | Lượt xem: 4735 | Lượt tải: 1download
Tóm tắt nội dung Lập trình XML với Java, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Trình bày: Ngô Bá Nam Phương 
Lập trình XML với Java 
Nội dung trình bày 
Xml Parsers 
Đọc nội dung tài liệu XML 
Tạo tài liệu XML 
XSLT 
XML Parser 
Java hỗ trợ 2 loại xml parser: 
 Tree Parser - DOM Parser: phân tích nội 
dung tài liệu XML theo mô hình cây phân cấp 
 Streaming Parser - SAX Parser ( Simple API 
for XML ), StAX Parser: phát sinh các sự kiện 
trong quá trình duyệt tài liệu Xml 
DOM Parser 
Ví dụ: 
 Helvetica 
 36 
Node font có 5 node con: 
 whitespace 
 name 
 whitespace 
 size 
 whitespace 
DOM Parser 
SAX Parser 
Phù hợp đối với các tài liệu có kích thước 
lớn và nội dung xử lý tương đối đơn giản. 
Phát sinh các sự kiện tương ứng trong quá 
trình đọc tài liệu. Application sẽ tạo các 
event listener lắng nghe các event do 
parser phát ra để truy xuất nội dung tài 
liệu. 
DOM Parser được xây dựng bên trên SAX 
Parser. DOM Parser xây dựng cây tài liệu 
DOM tree dựa trên các event nó nhận 
được do SAX Parser trả về. 
StAX Parser (Streaming API for XML ) 
Cung cấp mô hình xử lý đọc tài liệu XML 
đơn giản và thuận tiện hơn SAX parser 
Application sẽ gọi các hàm của parser về 
các sự kiện cần quan tâm để truy xuất nội 
dung tài liệu 
Nội dung trình bày 
Xml Parsers 
Đọc nội dung tài liệu XML 
Tạo tài liệu XML 
XSLT 
Đọc tài liệu XML 
DOM Parser 
XPath Expression 
StAX Parser 
DOM Parser 
import javax.xml.parsers.*; 
import org.w3c.dom.*; 
DocumentBuilderFactory factory = 
 DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = 
 factory.newDocumentBuilder(); 
Document doc = builder.parse(new 
 File("Sach.xml")); 
DOM Parser 
 // truy cập node gốc của tài liệu 
 Element root = 
 doc.getDocumentElement(); 
 // lấy về danh sách node con của một node 
 NodeList list = root.getChildNodes(); 
 for(int i=0;i<list.getLength();++i) 
 { 
 // xử lý từng node 
 Node node = list.item(i); 
 … 
 } 
DOM Parser 
 // Xử lý các node con dạng Element 
 NodeList list = root.getChildNodes(); 
 for(int i=0;i<list.getLength();++i) 
 { 
 Node node = list.item(i); 
 if(node instanceof Element) 
 { 
 // xử lý node name và size 
 Element element = (Element) node; 
 … 
 } 
 } 
DOM Parser 
Rút trích nội dung trong node name và 
size: 
Element element = (Element)node; // đang truy 
cập tại node name và size 
Text textNode = (Text)element.getFirstChild(); 
String content = textNode.getData(); 
if(element.getTagName().equals(“name”)) 
 name = content; 
else if(element.getTagName().equals(“size”)) 
 size = Integer.parseInt(content); 
DOM Parser 
Cách khác để duyệt và xử lý trên danh sách 
các node con của 1 node 
 for(Node childNode = element.getFirstChild(); 
 childNode != null; 
 childNode = childNode.getNextSibling() ) 
 { 
 … 
 } 
DOM Parser 
Lấy danh sách attributes của 1 node: 
 getAttributes : trả về NamedNodeMap đại diện cho 
 danh sách các attribute của node 
 NamedNodeMap attributes = element.getAttributes(); 
 for(int i=0;i<attributes.getLength();++i) 
 { 
 Node attributeNode = attributes.item(i); 
 String name = attributeNode.getNodeName(); 
 String value = attributeNode.getNodeValue(); 
 } 
DOM Parser 
Lấy giá trị thuộc tính thông qua tên thuộc 
tính 
Ví dụ: 
 String maSach = element.getAttribute(“MaSach”); 
 String tenSach = element.getAttribute(“TenSach”); 
Đọc tài liệu XML 
DOM Parser 
XPath Expression 
StAX Parser 
XPath 
Là các biểu thức đường dẫn cho phép truy 
cập đến các node trong cây tài liệu dễ 
dàng mà không cần phải duyệt và tìm 
kiếm trên toàn bộ cây tài liệu. 
Khởi tạo đối tượng XPath: 
 import javax.xml.xpath.*; 
 XPathFactory xpFactory = 
 XPathFactory.newInstance(); 
 XPath path = xpFactory.newXPath(); 
XPath 
Lấy giá trị của 1 element hoặc 1 attribute trong 
tài liệu: 
 Ví dụ: 
 123 
 C# 
 int id = 
Integer.parseInt(path.evaluate(“/EbookList/Ebook[1]/ID”,doc)); 
 String title = path.evaluate(“/EbookList/Ebook[1]/Title”,doc); 
 id = 
Integer.parseInt(path.evaluate(“/EbookList/Ebook[2]/@ID”,doc)); 
 title = path.evaluate(“/EbookList/Ebook[2]/@Title”,doc); 
XPath 
Lấy về danh sách các Node 
NodeList list = 
(NodeList)path.evaluate(“/EbookList/Ebook”, doc, 
XPathContants.NODESET); 
Lấy về 1 node 
Node node = 
(Node)path.evaluate(“/EbookList/Ebook[1]”, doc, 
XPathContants.NODE); 
Lấy về kết quả là giá trị của một hàm 
int count = 
((Number)path.evaluate("count(/EbookList/Ebook)", 
doc,XPathConstants.NUMBER)).intValue(); 
Đọc tài liệu XML 
DOM Parser 
XPath Expression 
StAX Parser 
StAX Parser - Events 
 Helvetica 
 36 
START_ELEMENT, element name: font 
CHARACTERS, content: white space 
START_ELEMENT, element name: name 
CHARACTERS, content: Helvetica 
END_ELEMENT, element name: name 
CHARACTERS, content: white space 
START_ELEMENT, element name: size 
CHARACTERS, content: 36 
END_ELEMENT, element name: size 
CHARACTERS, content: white space 
END_ELEMENT, element name: font 
StAX Parser 
// Mở tài liệu xml 
import javax.xml.stream.*; 
XMLInputFactory factory = 
 XMLInputFactory.newInstance(); 
XMLStreamReader parser = 
 factory.createXMLStreamReader(new 
 FileReader("DBSach.xml")); 
StAX Parser 
while(parser.hasNext()) 
 { 
 int event = parser.next(); 
 if(event == XMLStreamConstants.START_ELEMENT) 
 { 
 if(parser.getLocalName().equals("Sach")==true) 
 { 
 sach = new Sach(); 
 } 
 else if(parser.getLocalName().equals("MaSach")==true) 
 { 
 sach.setMaSach(Integer.parseInt(parser.getElementText())); 
 } 
 else if(parser.getLocalName().equals("TenSach")==true) 
 { 
 sach.setTenSach(parser.getElementText()); 
 listSach.add(sach); 
 } 
 } 
 } 
// Đọc và xử lý nội dung tài liệu XML 
StAX Parser 
Lấy giá trị thuộc tính bên trong Element: 
String soTrang = parser.getAttributeValue(null, 
"SoTrang"); 
String ISBN = 
parser.getAttributeValue(null,"ISBN"); 
Nội dung trình bày 
Xml Parsers 
Đọc nội dung tài liệu XML 
Tạo tài liệu XML 
XSLT 
Tạo tập tin XML – DOM Parser 
Tạo nội dung tài liệu XML: 
 createElement( “nodeName” ); 
 createTextNode( “textContent” ); 
 appendChild( nodeName ); 
 setAttribute( attributeName , value ); 
 … 
Tạo tập tin XML - DOM 
Ví dụ: 
 Element root = 
 doc.createElement(“root”); 
 Element child1 = 
 doc.createElement(“child”); 
 child1.setAttribute(“at1”,”value1”); 
 Text textNode1 = 
 doc.createTextNode(“text content”); 
 doc.appendChild(root); 
 root.appendChild(child); 
 child.appendChild(textNode1); 
Tạo tập tin XML - DOM 
 XML DOM API hiện thời không hỗ trợ việc kết xuất nội 
dung cây tài liệu lên bộ nhớ phụ. Ta có thể sử dụng 
XSLT để thực hiện: 
import javax.xml.transform.*; 
Transformer t = 
TransformerFactory.newInstance().newTransformer(); 
t.setOutputProperty (OutputKeys.INDENT, "yes"); 
t.setOutputProperty (OutputKeys.METHOD, "xml"); 
t.setOutputProperty 
("{}indent-amount", "2"); 
t.transform(new DOMSource(doc), new 
StreamResult(new FileOutputStream("temp.xml"))); 
Tạo tập tin Xml - StAX 
Sử dụng đối tượng XMLStreamWriter các 
phương thức: 
 writeStartDocument() 
 writeEndDocument() 
 writeStartElement(“elementName”) 
 writeEndElement() 
 writeAttribute(“attributeName”,”attributeValue”) 
 writeCharacters(“text”) 
Tạo tập tin Xml - StAX 
Tạo đối tượng XMLStreamWriter 
File file = new File("StAXOutput.xml"); 
XMLOutputFactory factory = 
 XMLOutputFactory.newInstance(); 
XMLStreamWriter writer = 
 factory.createXMLStreamWriter(new 
 FileOutputStream(file),"UTF-8"); 
Tạo tập tin Xml - StAX 
 Ví dụ: 
<Sach 
MaSach=“123”> 
 harry potter 
 123000 
writer.writeStartDocument(); 
 writer. writeStartElement (“Sach”); 
 writer. writeAttribute (“MaSach”,”123”); 
 writer. writeStartElement (“TenSach”); 
 writer. writeCharacters (“harry potter”); 
 writer. writeEndElement (); 
 writer. writeStartElement (“GiaTien”); 
 writer. writeCharacters (“123000”); 
 writer. writeEndElement (); 
 writer. writeEndElement (); 
writer. writeEndDocument (); 
Nội dung trình bày 
Xml Parsers 
Đọc nội dung tài liệu XML 
Tạo tài liệu XML 
XSLT 
XSLT – XSL Transformation 
Là ngôn ngữ đặc tả các luật để chuyển đổi 
tài liệu XML sang format khác ( plain text, 
XML, HTML, .. ) 
XSLT – XSL Transformation 
<xsl:stylesheet 
xmlns:xsl="" 
version="1.0"> 
 template1 
 template2 
 . . . 
XSLT – XSL Transformation 
: dùng để định nghĩa các template 
<xsl:stylesheet version = '1.0„ 
xmlns:xsl='> 
….. 
Khi gặp những thẻ thỏa đk “…” thì 
thực hiện những chỉ thị sau 
Biểu thức XPATH 
XSLT – XSL Transformation 
 Rút trích nội dung nằm trong các thẻ XML ( 
inner text hay thuộc tính của node ) và kết xuất ra file kết 
quả 
Nội dung rút trích được xác định thông qua thuộc tính select 
Nếu select trả về một tập các thẻ thì nội dung tất cả các thẻ 
này đều được kết xuất ra file kết quả 
 Nguyen Van A 
 0412341 
XSLT – XSL Transformation 
 a1 
 a2 
-Không có template Áp dụng xử lý mặc 
định: tiếp tục so 
khớp cho tất cả thẻ 
con của thẻ hiện 
hành 
-Không có template 
Mặc định: trả ra nội 
dung của thẻ a1 a2 
XSLT – XSL Transformation 
 
 Carl Cracker 
 75000 
 Harry Hacker 
 50000 
 Tony Tester 
 40000 
XSLT – XSL Transformation 
 ….. 
 Họ tên 
 Lương 
 Ngày sinh 
XSLT – XSL Transformation 
 - 
 - 
XSLT – XSL Transformation 
File styleSheet = new File("transform.xsl"); 
StreamSource styleSource = new 
 StreamSource(styleSheet); 
TransformerFactory factory = 
 TransformerFactory.newInstance(); 
Transformer t = 
 factory.newTransformer(styleSource); 
File file = new File("input.xml"); 
t.transform(new StreamSource(file), new 
 StreamResult(“output.html")); 
Cám ơn – Hỏi đáp 

File đính kèm:

  • pdfLập trình XML với Java.pdf