Posts tagged ‘XML’
Day 16: XSLT dengan Oracle XDK
Learning In Home-Original Date: 28 Januari 2009
Hari ini aku akan mencoba komponen XSLT milik Oracle XDK. Untuk melakukan transformasi melalui command line, aku dapat menggunakan tool oraxsl. Sebelum mulai menjalankan tool tersebut, aku mengatur CLASSPATH agar mengandung file xmlparserv2.jar terlebih dahulu.
Oracle menyediakan perluasan pada XSLT Processing-nya, dimana aku bisa menyertakan fungsi dan ekspresi Java di dalam dokumen XSL, seperti pada contoh berikut:
<xsl:stylesheet
xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:math="http://www.oracle.com/XSL/
Transform/java/java.lang.Math">
<xsl:template match="/">
<xsl:value-of
select="math:pow(10,5)" />
</xsl:template>
</xsl:stylesheet>
Contoh di atas akan selalu menghasilkan nilai 10^5 jika di-proses dengan oraxsl. Contoh lainnya, misalnya, untuk menampilkan tanggal hari ini:
<xsl:stylesheet xmlns:xsl= "http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:date= "http://www.oracle.com/XSL/Transform/ java/java.util.Date"> <xsl:variable name="tanggal" select="date:new()" /> <xsl:template match="nama"> <xsl:value-of select= "date:toLocaleString($tanggal)" /> </xsl:template> </xsl:stylesheet>
Pada contoh ini, aku mendeklarasikan sebuah object baru dari java.util.Date dengan nama tanggal. Lalu, aku memanggil method toLocaleString() dari object tanggal tersebut. Saat memanggil method apa saja dari sebuah class baru, aku menyertakan parameter pertama berupa nama variabel dari class tersebut.
Aku juga dapat melakukan transformasi di dalam program Java, seperti yang terlihat pada contoh berikut:
try {
InputStream xslInput = new
FileInputStream("c:\\test.xsl");
XSLProcessor xslProcessor = new
XSLProcessor();
XSLStylesheet xsl = xslProcessor.
newXSLStylesheet(xslInput);
DOMParser parser = new DOMParser();
InputStream xmlInput = new
FileInputStream("c:\\test.xml");
parser.parse(xmlInput);
XMLDocument doc =
parser.getDocument();
XMLDocumentFragment docResult =
xslProcessor.processXSL(xsl, doc);
docResult.print(System.out);
} catch (Exception e) {
e.printStackTrace();
}
Day 15: Oracle XDK
Learning In Home-Original Date: 27 Januari 2009
Masih dalam suasana yang meriah ini, aku akan menyemarakkannya dengan mempelajari Oracle XML Developer Kit (XDK). XDK adalah kumpulan tools untuk mempermudah membangun aplikasi berbasis XML. Pada instalasi database Oracle, ia dapat ditemukan di folder %ORACLE_HOME%\XDK. XDK memiliki komponen yang dapat dipakai oleh aplikasi Java, C, dan C++, yang terdiri atas XML Parser, XSLT Processor, XSLT VM, XML Schema Processor, XML Class Generator, XML JAXB Class Generator, XML Java Beans, XML SQL Utility, XSQL Servlet, XML Pipeline processor. Pertama kali melihat nama-nama ini membuatku sedikit kewalahan, tapi karena nama-nama komponen tersebut terlihat cukup keren, aku tidak patah semangat.
Aku akan mulai dengan mencoba memakai XML Parser di Java. XDK menyediakan dua jenis XML Parser, yaitu DOM Parser dan SAX Parser. DOM Parser akan menghasilkan representasi dokumen XML dalam bentuk tree, sementara SAX Parser men-parse berurutan dan diprogram berdasarkan event. Secara garis besar, DOM Parser membutuhkan memori lebih besar dan sesuai digunakan jika struktur tree dokumen XML akan dimodifikasi. Sementara SAX Parser lebih hemat memori dan lebih tepat digunakan bila tidak ada perubahan pada dokumen XML.
Untuk menggunakan XML Parser dari XDK, aku harus memasukkan file %ORACLE_HOME%\lib\xmlparserv2.jar di CLASSPATH. Aku akan mencoba menvalidasi XML dengan DOM Parser berdasarkan DTD, dan men-parse DTD terlebih dahulu sebelum men-parse dokumen XML dengan contoh berikut:
DOMParser parser = new DOMParser();
parser.setErrorStream(System.out);
parser.showWarnings(true);
parser.setValidationMode(
DOMParser.DTD_VALIDATION);
FileInputStream fileDTD = new
FileInputStream("C:\\test.dtd");
BufferedInputStream inputDTD = new
BufferedInputStream(fileDTD);
parser.parseDTD(inputDTD,
"root-element");
parser.setDoctype(parser.getDoctype());
Setelah itu, aku akan men-parse dokumen XML dan menampilkan seluruh element-nya:
FileInputStream fis = new
FileInputStream("C:\\test.xml");
BufferedInputStream input = new
BufferedInputStream(fis);
parser.parse(input);
XMLDocument doc =
parser.getDocument();
NodeList nl = doc.
getElementsByTagName("*");
for (int i=0; i<nl.getLength();
i++) {
Node n = nl.item(i);
System.out.println(n.
getNodeName());
}
Untuk menampilkan atribut untuk seluruh element bernama “property”, aku menggunakan kode yang seperti berikut ini:
XMLDocument doc = parser.
getDocument();
NodeList nl = doc.
getElementsByTagName(
"property");
for (int i=0; i<nl.getLength();
i++) {
Node n = nl.item(i);
NamedNodeMap nnm =
n.getAttributes();
StringBuilder sb = new
StringBuilder("PROPERTY ");
if (nnm != null) {
for (int j=0;
j<nnm.getLength();
j++) {
Node n2 = nnm.item(j);
sb.append(n2.getNodeName() +
"=" +
n2.getNodeValue() + ";");
}
}
System.out.println(
sb.toString());
}
Berikutnya aku akan latihan men-parse dokumen XML yang sama, tapi kali ini aku akan menggunakan SAX Parser. Aku membuat kode program seperti berikut ini:
import java.io.*;
import oracle.xml.parser.v2.SAXParser;
import org.xml.sax.*;
public class TestSAXParser implements
ContentHandler {
public TestSAXParser() {
try {
SAXParser parser = new SAXParser();
parser.setContentHandler(this);
parser.setValidationMode(
SAXParser.NONVALIDATING);
parser.setAttribute(
SAXParser.STANDALONE,
Boolean.TRUE);
FileInputStream fis = new
FileInputStream("C:\\test.xml");
BufferedInputStream input = new
BufferedInputStream(fis);
parser.parse(input);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
new TestSAXParser();
}
public void characters(char[] ch,
int start, int length)
throws SAXException {}
public void endDocument() throws
SAXException {
System.out.println("Selesai parsing!");
}
public void endElement(String uri,
String localName, String name)
throws SAXException {}
public void endPrefixMapping(
String prefix) throws SAXException {}
public void ignorableWhitespace(char[] ch,
int start, int length)
throws SAXException {}
public void processingInstruction(
String target, String data)
throws SAXException {}
public void setDocumentLocator(
Locator locator) {}
public void skippedEntity(String name)
throws SAXException {}
public void startDocument() throws
SAXException {
System.out.println("Mulai Parsing...");
}
public void startElement(String uri,
String localName, String name,
Attributes atts) throws SAXException {
StringBuilder sb = new
StringBuilder(name + " = ");
for (int i=0; i<atts.getLength(); i++) {
sb.append(atts.getLocalName(i) +
"=" + atts.getValue(i) + "; ");
}
System.out.println(sb.toString());
}
public void startPrefixMapping(
String prefix, String uri)
throws SAXException {}
}
Sebagai latihan terakhir dalam hari ini, aku akan membuat dan memodifikasi struktur XML (melalui DOM Parser) di dalam program, kemudian menuliskannya ke dalam sebuah file:
String strXML =
"<karyawan><nama>snake</nama>" +
"<nama>solid</nama></karyawan>";
DOMParser parser = new DOMParser();
try {
parser.parse(
new StringReader(strXML));
XMLDocument doc =
parser.getDocument();
Element e = doc.
createElement("nama");
e.setTextContent(
"karyawan baru");
doc.getDocumentElement().
appendChild(e);
FileOutputStream fos = new
FileOutputStream(
"c:\\test.xml");
doc.print(fos);
} catch (Exception e) {
e.printStackTrace();
}