XML kini telah menjadi format pertukaran data universal. Kemandirian platform, kemandirian bahasa, dan kemandirian sistem menghadirkan kemudahan yang luar biasa bagi integrasi dan interaksi data. Untuk pengetahuan tata bahasa dan detail teknis XML itu sendiri, Anda perlu membaca literatur teknis yang relevan, yang meliputi DOM (Document Object Model), DTD (Document Type Definition), SAX (Simple API for XML), XSD (Xml Schema Definition) ). , XSLT (Extensible Stylesheet Language Transformations), untuk detailnya, silakan merujuk ke dokumen situs web resmi w3c http://www.w3.org untuk informasi lebih lanjut.
XML diuraikan dengan cara yang sama dalam bahasa yang berbeda, tetapi sintaksis yang diterapkan berbeda. Ada dua metode dasar parsing, yang satu disebut SAX dan yang lainnya disebut DOM. SAX didasarkan pada penguraian aliran peristiwa, dan DOM didasarkan pada penguraian struktur pohon dokumen XML. Asumsikan bahwa konten dan struktur XML kita adalah sebagai berikut:
Copy kode kodenya sebagai berikut:
<?xml versi="1.0" pengkodean="UTF-8"?>
<karyawan>
<karyawan>
<nama>ddviplinux</nama>
<seks>m</seks>
<usia>30</usia>
</karyawan>
</karyawan>
Artikel ini menggunakan bahasa JAVA untuk mengimplementasikan pembuatan dokumen XML dan penguraian DOM dan SAX.
Pertama tentukan antarmuka untuk mengoperasikan dokumen XML, XmlDocument. Ini mendefinisikan antarmuka untuk membuat dan menguraikan dokumen XML.
Copy kode kodenya sebagai berikut:
paket com.alisoft.facepay.framework.bean;
/**
*
* @penulis hongliang.dinghl
* Tentukan antarmuka untuk membuat dan menguraikan dokumen XML
*/
antarmuka publik XmlDocument {
/**
* Buat dokumen XML
* @param fileName Nama path lengkap file
*/
public void createXml(String nama file);
/**
* Parsing dokumen XML
* @param fileName Nama path lengkap file
*/
public void parserXml(String nama file);
}
1.DOM menghasilkan dan mem-parsing dokumen XML
Seperangkat antarmuka ditentukan untuk versi dokumen XML yang diurai. Parser membaca seluruh dokumen dan membangun struktur pohon residen memori yang kemudian dapat dimanipulasi oleh kode menggunakan antarmuka DOM. Keuntungan: Seluruh pohon dokumen ada di memori, mudah dioperasikan; mendukung berbagai fungsi seperti penghapusan, modifikasi, dan penataan ulang; Kekurangan: Mentransfer seluruh dokumen ke dalam memori (termasuk node yang tidak berguna) membuang-buang waktu dan ruang; juga perlu mengakses data ini beberapa kali; sumber daya perangkat keras (memori, CPU) mencukupi;
Copy kode kodenya sebagai berikut:
paket com.alisoft.facepay.framework.bean;
impor java.io.FileInputStream;
impor java.io.FileNotFoundException;
impor java.io.FileOutputStream;
impor java.io.IOException;
impor java.io.InputStream;
impor java.io.PrintWriter;
import javax.xml.parsers.DocumentBuilder;
impor javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
impor javax.xml.transform.OutputKeys;
impor javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
impor javax.xml.transform.TransformerException;
impor javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
impor javax.xml.transform.stream.StreamResult;
impor org.w3c.dom.Dokumen;
import org.w3c.dom.Element;
impor org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
*
* @penulis hongliang.dinghl
* Pembuatan DOM dan penguraian dokumen XML
*/
kelas publik DomDemo mengimplementasikan XmlDocument {
dokumen Dokumen pribadi;
Nama file String pribadi;
kekosongan publik init() {
mencoba {
Pabrik DocumentBuilderFactory = DocumentBuilderFactory
.newInstance();
Pembuat DocumentBuilder = pabrik.newDocumentBuilder();
this.document = pembangun.newDocument();
} tangkapan (ParserConfigurationException e) {
Sistem.keluar.println(e.getMessage());
}
}
public void createXml(String nama file) {
Elemen root = this.document.createElement("karyawan");
this.document.appendChild(root);
Elemen karyawan = this.document.createElement("karyawan");
Nama elemen = this.document.createElement("nama");
nama.appendChild(ini.document.createTextNode("Ding Hongliang"));
karyawan.appendChild(nama);
Elemen seks = this.document.createElement("sex");
sex.appendChild(ini.dokumen.createTextNode("m"));
Employee.appendChild(jenis kelamin);
Elemen age = this.document.createElement("age");
age.appendChild(ini.dokumen.createTextNode("30"));
karyawan.appendChild(usia);
root.appendChild(karyawan);
TransformerFactory tf = TransformerFactory.newInstance();
mencoba {
Trafo trafo = tf.newTransformer();
Sumber DOMSource = DOMSource baru(dokumen);
transformator.setOutputProperty(OutputKeys.ENCODING, "gb2312");
transformator.setOutputProperty(OutputKeys.INDENT, "ya");
PrintWriter pw = PrintWriter baru(FileOutputStream baru(Namafile));
Hasil StreamResult = StreamResult baru(pw);
transformator.transform(sumber, hasil);
System.out.println("File XML berhasil dibuat!");
} tangkapan (TransformerConfigurationException e) {
Sistem.keluar.println(e.getMessage());
} tangkapan (IllegalArgumentException e) {
Sistem.keluar.println(e.getMessage());
} tangkapan (FileNotFoundException e) {
Sistem.keluar.println(e.getMessage());
} tangkapan (TransformerException e) {
Sistem.keluar.println(e.getMessage());
}
}
public void parserXml(String nama file) {
mencoba {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Dokumen dokumen = db.parse(namafile);
Karyawan NodeList = document.getChildNodes();
for (int i = 0; i < karyawan.getLength(); i++) {
Karyawan simpul = karyawan.item(i);
NodeList EmployeeInfo = karyawan.getChildNodes();
untuk (int j = 0; j < EmployeeInfo.getLength(); j++) {
Node simpul = EmployeeInfo.item(j);
NodeList karyawanMeta = node.getChildNodes();
untuk (int k = 0; k < EmployeeMeta.getLength(); k++) {
Sistem.keluar.println(employeeMeta.item(k).getNodeName()
+ ":" + karyawanMeta.item(k).getTextContent());
}
}
}
System.out.println("Penguraian selesai");
} tangkapan (FileNotFoundException e) {
Sistem.keluar.println(e.getMessage());
} tangkapan (ParserConfigurationException e) {
Sistem.keluar.println(e.getMessage());
} tangkapan (SAXException e) {
Sistem.keluar.println(e.getMessage());
} tangkapan (IOException e) {
Sistem.keluar.println(e.getMessage());
}
}
}
2.SAX menghasilkan dan mem-parsing dokumen XML
Untuk mengatasi masalah DOM, muncul SAX. SAX, didorong oleh peristiwa. Ketika parser menemukan awal suatu elemen, akhir elemen, awal atau akhir teks, dokumen, dll., parser mengirimkan peristiwa, dan pemrogram menulis kode yang merespons peristiwa ini dan menyimpan data. Keuntungan: Tidak perlu memuat seluruh dokumen terlebih dahulu, dan menggunakan lebih sedikit sumber daya; kode parser SAX lebih kecil dari kode parser DOM, dan cocok untuk Applet dan diunduh. Kekurangan: tidak persisten; setelah kejadian, jika data tidak disimpan, data akan hilang; tidak memiliki kewarganegaraan; hanya teks yang dapat diperoleh dari peristiwa tersebut, tetapi tidak diketahui elemen mana yang dimiliki teks tersebut; Dokumen XML Konten dalam jumlah kecil, jarang ditinjau kembali;
kode Jawa
Copy kode kodenya sebagai berikut:
paket com.alisoft.facepay.framework.bean;
impor java.io.FileInputStream;
impor java.io.FileNotFoundException;
impor java.io.IOException;
impor java.io.InputStream;
import javax.xml.parsers.ParserConfigurationException;
impor javax.xml.parsers.SAXParser;
impor javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
*
* @penulis hongliang.dinghl
* Penguraian dokumen SAX
*/
kelas publik SaxDemo mengimplementasikan XmlDocument {
public void createXml(String nama file) {
System.out.println("<<"+namafile+">>");
}
public void parserXml(String nama file) {
SAXParserFactory saxfac = SAXParserFactory.newInstance();
mencoba {
SAXParser saxparser = saxfac.newSAXParser();
InputStream adalah = FileInputStream baru(Namafile);
saxparser.parse(adalah, MySAXHandler baru());
} tangkapan (ParserConfigurationException e) {
e.printStackTrace();
} tangkapan (SAXException e) {
e.printStackTrace();
} tangkapan (FileNotFoundException e) {
e.printStackTrace();
} tangkapan (IOException e) {
e.printStackTrace();
}
}
}
kelas MySAXHandler memperluas DefaultHandler {
boolean hasAttribute = salah;
Atribut atribut = null;
public void startDocument() melempar SAXException {
System.out.println("Dokumen sudah mulai dicetak");
}
public void endDocument() melempar SAXException {
System.out.println("Pencetakan dokumen telah selesai");
}
public void startElement(String uri, String localName, String qName,
Atribut atribut) melempar SAXException {
if (qName.equals("karyawan")) {
kembali;
}
if (qName.equals("karyawan")) {
Sistem.keluar.println(qName);
}
if (atribut.getLength() > 0) {
this.attributes = atribut;
this.hasAttribute = benar;
}
}
public void endElement(String uri, String nama lokal, String qName)
melempar SAXException {
if (hasAttribute && (atribut != null)) {
for (int i = 0; i < atribut.getLength(); i++) {
Sistem.keluar.println(atribut.getQName(0)
+ atribut.getValue(0));
}
}
}
karakter public void (char[] ch, int start, int length)
melempar SAXException {
System.out.println(String baru(ch, start, length));
}
}
paket com.alisoft.facepay.framework.bean;
impor java.io.FileInputStream;
impor java.io.FileNotFoundException;
impor java.io.IOException;
impor java.io.InputStream;
import javax.xml.parsers.ParserConfigurationException;
impor javax.xml.parsers.SAXParser;
impor javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
*
* @penulis hongliang.dinghl
* Penguraian dokumen SAX
*/
kelas publik SaxDemo mengimplementasikan XmlDocument {
public void createXml(String nama file) {
System.out.println("<<"+namafile+">>");
}
public void parserXml(String nama file) {
SAXParserFactory saxfac = SAXParserFactory.newInstance();
mencoba {
SAXParser saxparser = saxfac.newSAXParser();
InputStream adalah = FileInputStream baru(Namafile);
saxparser.parse(adalah, MySAXHandler baru());
} tangkapan (ParserConfigurationException e) {
e.printStackTrace();
} tangkapan (SAXException e) {
e.printStackTrace();
} tangkapan (FileNotFoundException e) {
e.printStackTrace();
} tangkapan (IOException e) {
e.printStackTrace();
}
}
}
kelas MySAXHandler memperluas DefaultHandler {
boolean hasAttribute = salah;
Atribut atribut = null;
public void startDocument() melempar SAXException {
System.out.println("Dokumen sudah mulai dicetak");
}
public void endDocument() melempar SAXException {
System.out.println("Pencetakan dokumen telah selesai");
}
public void startElement(String uri, String localName, String qName,
Atribut atribut) melempar SAXException {
if (qName.equals("karyawan")) {
kembali;
}
if (qName.equals("karyawan")) {
Sistem.keluar.println(qName);
}
if (atribut.getLength() > 0) {
this.attributes = atribut;
this.hasAttribute = benar;
}
}
public void endElement(String uri, String nama lokal, String qName)
melempar SAXException {
if (hasAttribute && (atribut != null)) {
for (int i = 0; i < atribut.getLength(); i++) {
Sistem.keluar.println(atribut.getQName(0)
+ atribut.getValue(0));
}
}
}
karakter public void (char[] ch, int start, int length)
melempar SAXException {
System.out.println(String baru(ch, start, length));
}
}
3.DOM4J menghasilkan dan mem-parsing dokumen XML
DOM4J adalah Java XML API yang sangat, sangat bagus dengan kinerja luar biasa, fungsi yang kuat, dan kemudahan penggunaan yang luar biasa. Saat ini, Anda dapat melihat semakin banyak perangkat lunak Java yang menggunakan DOM4J untuk membaca dan menulis XML. Perlu disebutkan bahwa JAXM milik Sun juga menggunakan DOM4J.
kode Jawa
Copy kode kodenya sebagai berikut:
paket com.alisoft.facepay.framework.bean;
impor java.io.File;
impor java.io.FileWriter;
impor java.io.IOException;
impor java.io.Writer;
impor java.util.Iterator;
impor org.dom4j.Dokumen;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
impor org.dom4j.Element;
impor org.dom4j.io.SAXReader;
impor org.dom4j.io.XMLWriter;
/**
*
* @penulis hongliang.dinghl
* Dom4j menghasilkan dokumen XML dan mem-parsing dokumen XML
*/
kelas publik Dom4jDemo mengimplementasikan XmlDocument {
public void createXml(String nama file) {
Dokumen dokumen = DocumentHelper.createDocument();
Elemen karyawan=document.addElement("karyawan");
Elemen karyawan=karyawan.addElement("karyawan");
Nama elemen= karyawan.addElement("nama");
nama.setText("ddvip");
Elemen sex=employee.addElement("sex");
seks.setText("m");
Elemen age=employee.addElement("age");
usia.setText("29");
mencoba {
Penulis fileWriter=Penulis File baru(Namafile);
XMLWriter xmlWriter=XMLWriter baru(fileWriter);
xmlWriter.write(dokumen);
xmlWriter.close();
} tangkapan (IOException e) {
Sistem.keluar.println(e.getMessage());
}
}
public void parserXml(String nama file) {
File inputXml=File baru(Namafile);
SAXReader saxReader = SAXReader baru();
mencoba {
Dokumen dokumen = saxReader.read(inputXml);
Elemen karyawan=document.getRootElement();
for(Iterator i = karyawan.elementIterator(); i.hasNext();){
Elemen karyawan = (Elemen) i.next();
for(Iterator j = karyawan.elementIterator(); j.hasNext();){
Elemen simpul=(Elemen) j.next();
System.out.println(node.getName()+":"+node.getText());
}
}
} tangkapan (DocumentException e) {
Sistem.keluar.println(e.getMessage());
}
Sistem.keluar.println("dom4j parserXml");
}
}
4.JDOM menghasilkan dan mem-parsing XML
Untuk mengurangi jumlah pengkodean untuk DOM dan SAX, JDOM memiliki keunggulan: prinsip 20-80 sangat mengurangi jumlah kode. Kesempatan penggunaan: Fungsi yang akan diimplementasikan sederhana, seperti parsing, pembuatan, dll., namun pada level paling bawah, JDOM masih menggunakan dokumen SAX (paling umum digunakan), DOM, dan Xanan.
Copy kode kodenya sebagai berikut:
paket com.alisoft.facepay.framework.bean;
impor java.io.FileNotFoundException;
impor java.io.FileOutputStream;
impor java.io.IOException;
impor java.util.List;
impor org.jdom.Dokumen;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
/**
*
* @penulis hongliang.dinghl
* JDOM menghasilkan dan mem-parsing dokumen XML
*
*/
kelas publik JDomDemo mengimplementasikan XmlDocument {
public void createXml(String nama file) {
Dokumen dokumen;
Akar elemen;
root=Elemen baru("karyawan");
dokumen=Dokumen baru(root);
Elemen karyawan=Elemen baru("karyawan");
root.addContent(karyawan);
Nama elemen=Elemen baru("nama");
nama.setText("ddvip");
karyawan.addContent(nama);
Elemen jenis kelamin=Elemen baru("jenis kelamin");
seks.setText("m");
karyawan.addContent(jenis kelamin);
Elemen umur=Elemen baru("usia");
usia.setText("23");
karyawan.addContent(usia);
XMLOutputter XMLOut = XMLOutputter baru();
mencoba {
XMLOut.output(dokumen, FileOutputStream baru(Namafile));
} tangkapan (FileNotFoundException e) {
e.printStackTrace();
} tangkapan (IOException e) {
e.printStackTrace();
}
}
public void parserXml(String nama file) {
Pembuat SAXBuilder=SAXBuilder baru(salah);
mencoba {
Dokumen dokumen=builder.build(namafile);
Elemen karyawan=document.getRootElement();
Daftar EmployeeList=employees.getChildren("employee");
for(int i=0;iElement karyawan=(Elemen)employeeList.get(i);
Daftar EmployeeInfo=employee.getChildren();
for(int j=0;jSystem.out.println(((Element)employeeInfo.get(j)).getName()+":"+((Element)employeeInfo.get(j)).getValue());
}
}
} tangkapan (JDOMException e) {
e.printStackTrace();
} tangkapan (IOException e) {
e.printStackTrace();
}
}
}