- segala sesuatu dalam dokumen termasuk kedalam document node
- setiap elemen XML (tag XML) termasuk kedalam element node
- setiap atribut termasuk kedalam attribute node
- komentar termasuk kedalam comment node
berikut merupakan contoh program untuk melakukan pengaksesan dan manipulasi file XML dengan menggunakan java.
package parsingXML;
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.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.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class parseXML {
private String filePath;
public static void main (String [] args) {
parseXML pXML = new parseXML("read.xml");
pXML.readXML();
pXML.editXML();
pXML.writeXML("readCopy.xml");
}
public parseXML() {
}
public parseXML(String path) {
filePath = path;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public Document generateDoc(String path) throws ParserConfigurationException,SAXException,IOException {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(path);
return doc;
}
public void readXML() {
try {
Node readItem = null;
Document doc = generateDoc(getFilePath());
Node nodeRoot = doc.getFirstChild();
//cara 1
NodeList nodeListNama = doc.getElementsByTagName("nama");
NodeList nodeListNim = doc.getElementsByTagName("nim");
NodeList nodeListEmail = doc.getElementsByTagName("email");
NodeList nodeListUmur = doc.getElementsByTagName("umur");
//cara 2
NodeList nodeListMhs = doc.getElementsByTagName("mahasiswa");
//output cara 1
for (int i = 0; i < nodeListNim.getLength(); i++) {
readItem = nodeListNama.item(i);
System.out.println("nama : "+readItem.getTextContent());
readItem = nodeListNim.item(i);
System.out.println("nim : "+readItem.getTextContent());
readItem = nodeListEmail.item(i);
System.out.println("email : "+readItem.getTextContent());
readItem = nodeListUmur.item(i);
System.out.println("umur : "+readItem.getTextContent());
}
//output cara 2
for (int i = 0; i < nodeListNim.getLength(); i++) {
readItem = nodeListMhs.item(i);
System.out.println(readItem.getTextContent());
}
} catch (ParserConfigurationException PCE) {
PCE.printStackTrace();
} catch (SAXException SE) {
SE.printStackTrace();
} catch (IOException IOE) {
IOE.printStackTrace();
}
}
public Document editXML() {
Document docReturn = null;
try {
Node readItem = null;
NamedNodeMap readNNM = null;
Document doc = generateDoc(getFilePath());
Node nodeRoot = doc.getFirstChild();
NodeList nodeList = doc.getElementsByTagName("mahasiswa");
//mengganti id mahasiswa yang mempunyai id=0
for (int i = 0; i < nodeList.getLength(); i++) {
readItem = nodeList.item(i);
readNNM = readItem.getAttributes();
if (readNNM.getNamedItem("id").getTextContent().equals("0")) {
readNNM.getNamedItem("id").setTextContent("9");
}
}
//mengganti email mahasiswa yang mempunyai nim 113108029
nodeList = doc.getElementsByTagName("nim");
for (int i = 0; i < nodeList.getLength(); i++) {
readItem = nodeList.item(i);
if (readItem.getTextContent().equals("113108029")) {
Node tmp = doc.getElementsByTagName("email").item(i);
tmp.setTextContent("choel.thaz@gmail.com");
}
}
docReturn = doc;
} catch (ParserConfigurationException PCE) {
PCE.printStackTrace();
} catch (SAXException SE) {
SE.printStackTrace();
} catch (IOException IOE) {
IOE.printStackTrace();
}
return docReturn;
}
public void writeXML(String path) {
try {
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer trans = transFactory.newTransformer();
Document doc = editXML();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(path));
trans.transform(source, result);
} catch (TransformerConfigurationException TCE) {
TCE.printStackTrace();
} catch (TransformerException TE) {
TE.printStackTrace();
}
}
}
contoh program diatas akan membaca file yang bernama read.xml (sesuaikan posisi file read.xml). setelah file dibaca maka hasil pembacaan akan ditampilkan dalam command line. setelah file ditampilkan, maka akan dilakukan pengubahan isi dari file xml (id dan email) melalui method editXML. setelah pengubahan dilakukan program akan menuliskan file xml baru readCopy.xml (tergantung dari parameter path yang diterima oleh method writeXML).
adapun isi dari file read.xml adalah sebagai berikut:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<root>
<mahasiswa id="0" status="aktif">
<nama>choel D Ace</nama>
<nim>113108029</nim>
<email>choel_j@yahoo.com</email>
<umur>20</umur>
</mahasiswa>
<mahasiswa id="1" status="aktif">
<nama>metha amelia</nama>
<nim>113108026</nim>
<email>amelia_metha@yahoo.com</email>
<umur>20</umur>
</mahasiswa>
</root>
berikut beberapa penjelasan dari paket yang diimport dalam program:
java.io.File
merupakan representasi abstrak dari sebuah file atau direktory.
java.io.IOException
merupakan exception yang akan dibangkitkan jika terjadi kegagalan atau interupsi pada saat proses I/O
org.w3c.dom.Document
representasi dari seluruh dokumen XML, secara konsep interface Document merupakan root dari dokumen tree. interface Dokumen menyediakan akses kepada data-data yang terdapat dalam dokumen.
org.w3c.dom.NamedNodeMap
merupakan representasi collection dari node yang bisa diakses menggunakan nama (biasanya digunakan untuk akses atribut dari suatu element)
org.w3c.dom.Node
merupakan representasi dari tiap-tiap node yang terdapat dalam struktur tree dokumen XML
org.w3c.dom.NodeList
merupakan list dari node-node yang terdapat dalam dokumen XML. untuk melakukan akses kepada list node, digunakan index yang berupa integer (dimulai dari 0)
kalo ada kesalahan mohon dikoreksi :)
semoga bermanfaat..
No comments:
Post a Comment