1. Pengetahuan dasar:
Umumnya ada empat metode Java untuk mengurai XML: DOM, SAX, JDOM, dan DOM4J.
2. Pengenalan penggunaan
1), DOM
(1) Pendahuluan
Antarmuka yang disediakan oleh W3C (org.w3c.dom) membaca seluruh dokumen XML ke dalam memori dan membangun pohon DOM untuk beroperasi pada setiap node. Keuntungannya adalah seluruh dokumen selalu ada di memori, kita dapat mengakses node mana pun kapan saja, dan penjelajahan pohon juga merupakan operasi yang relatif familiar; kelemahannya adalah memakan memori, dan kita harus menunggu hingga semua dokumen dibaca ke dalam memori sebelum diproses.
(2) Kode contoh:
Copy kode kodenya sebagai berikut:
<?xml versi="1.0" pengkodean="UTF-8" mandiri="tidak"?>
<akar>
<Telepon>
<ketik nama="nokia">
<harga>599</harga>
<operator>CMCC</operator>
</tipe>
<ketik nama="xiaomi">
<harga>699</harga>
<operator>ChinaNet</operator>
</tipe>
</Telepon>
</akar>
Copy kode kodenya sebagai berikut:
impor java.io.ByteArrayOutputStream;
impor java.io.File;
impor java.io.FileOutputStream;
impor java.io.IOException;
impor java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
impor javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
XMLHandler kelas publik {
XMLHandler publik(){
}
String publik buatXML(){
String xmlStr = nol;
Pabrik DocumentBuilderFactory = DocumentBuilderFactory.newInstance();
mencoba {
Pembuat DocumentBuilder = pabrik.newDocumentBuilder();
Dokumen dokumen = pembangun.newDocument();
dokumen.setXmlVersion("1.0");
Elemen root = document.createElement("root");
dokumen.appendChild(root);
Elemen telepon = document.createElement("TelePhone");
Elemen nokia = document.createElement("type");
nokia.setAttribute("nama", "nokia");
Elemen hargaNokia = document.createElement("harga");
hargaNokia.setTextContent("599");
nokia.appendChild(hargaNokia);
Elemen operatorNokia = document.createElement("operator");
operatorNokia.setTextContent("CMCC");
nokia.appendChild(operatorNokia);
telepon.appendChild(nokia);
Elemen xiaomi = document.createElement("type");
xiaomi.setAttribute("nama", "xiaomi");
Harga elemenXiaoMi = document.createElement("harga");
hargaXiaoMi.setTextContent("699");
xiaomi.appendChild(hargaXiaoMi);
Elemen operatorXiaoMi = document.createElement("operator");
operatorXiaoMi.setTextContent("ChinaNet");
xiaomi.appendChild(operatorXiaoMi);
telepon.appendChild(xiaomi);
root.appendChild(telepon);
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformator transFormer = transFactory.newTransformer();
DOMSource domSource = DOMSource baru(dokumen);
//ekspor string
ByteArrayOutputStream bos = ByteArrayOutputStream();
transFormer.transform(domSource, StreamResult baru(bos));
xmlStr = bos.toString();
//-------
//simpan sebagai file
File file = File baru("TelePhone.xml");
if(!file.ada()){
file.createNewFile();
}
FileOutputStream keluar = FileOutputStream baru(file);
StreamResult xmlResult = StreamResult baru(keluar);
transFormer.transform(domSource, xmlResult);
//--------
} tangkapan (ParserConfigurationException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}menangkap (TransformerConfigurationException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}menangkap (TransformerException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}menangkap (IOException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
kembalikan xmlStr;
}
kekosongan publik parserXML(String strXML){
Pabrik DocumentBuilderFactory = DocumentBuilderFactory.newInstance();
mencoba {
Pembuat DocumentBuilder = pabrik.newDocumentBuilder();
StringReader sr = StringReader baru(strXML);
InputSource adalah = InputSource baru(sr);
Dokumen doc = builder.parse(is);
Elemen rootElement = doc.getDocumentElement();
Ponsel NodeList = rootElement.getElementsByTagName("type");
for (int i = 0; i < ponsel.getLength(); i++) {
Jenis simpul = ponsel.item(i);
String phoneName = ((Elemen)type).getAttribute("nama");
System.out.println("Nama Telepon = "+Nama Telepon);
Properti NodeList = type.getChildNodes();
untuk (int j = 0; j < properti.getLength(); j++) {
Properti simpul = properti.item(j);
String nodeName = properti.getNodeName();
if (nodeName.equals("harga")) {
String harga=properti.getFirstChild().getNodeValue();
System.out.println("harga="+harga);
} else if (nodeName.equals("operator")) {
String operator=property.getFirstChild().getNodeValue();
Sistem.keluar.println("operator="+operator);
}
}
}
} tangkapan (ParserConfigurationException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}menangkap (SAXException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
} tangkapan (IOException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
}
public static void main(String[] args) {
Pengendali XMLHandler = XMLHandler baru();
String xml = handler.createXML();
Sistem.keluar.println(xml);
penangan.parserXML(xml);
}
}
(3) Perbedaan antara Elemen dan Node (org.w3c.dom)
Objek Node adalah tipe data utama dari keseluruhan model objek dokumen. Ini adalah objek paling dasar di DOM dan mewakili node abstrak di pohon dokumen. Namun dalam penggunaan sebenarnya, objek Node jarang digunakan secara langsung. Sebaliknya, sub-objek Elemen, Attr, Teks, dll. dari objek Node digunakan.
Objek Elemen mewakili elemen dalam dokumen HTML atau XML dan merupakan sub-objek utama dari kelas Node. Elemen tersebut dapat berisi atribut, sehingga Elemen memiliki metode untuk mengakses atributnya.
Elemen diwarisi dari Node. Elemen adalah definisi berskala kecil. Elemen tersebut harus berupa node yang berisi informasi lengkap untuk menjadi sebuah elemen, seperti <div>...</div>. Tetapi sebuah node belum tentu merupakan sebuah elemen, dan sebuah elemen harus berupa sebuah node.
node memiliki beberapa subtipe: Elemen, Teks, Atribut, RootElement, Komentar, Namespace, dll.
2), saksofon
3), JDOM
4), DOM4J
(1) Pendahuluan
dom4j saat ini merupakan yang terbaik dalam penguraian XML (Hibernate dan JAXM Sun juga menggunakan dom4j untuk mengurai XML). Dom4j menggabungkan banyak fungsi di luar representasi dokumen XML dasar, termasuk dukungan XPath terintegrasi, dukungan Skema XML, dan pemrosesan dokumen besar atau streaming berbasis acara.
Saat menggunakan XPATH, tambahkan jaxen.jar, jika tidak, kesalahan berikut akan terjadi:
Copy kode kodenya sebagai berikut:
Pengecualian di thread "utama" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
di org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
di org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
di org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:164)
(2) Kode contoh:
Copy kode kodenya sebagai berikut:
impor java.io.File;
impor java.io.FileWriter;
impor java.io.IOException;
impor java.io.StringReader;
impor java.io.StringWriter;
impor java.util.List;
impor org.dom4j.Dokumen;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
impor org.dom4j.Element;
import org.dom4j.io.OutputFormat;
impor org.dom4j.io.SAXReader;
impor org.dom4j.io.XMLWriter;
import org.xml.sax.InputSource;
XMLHandler kelas publik {
XMLHandler publik() {
// TODO Stub konstruktor yang dibuat secara otomatis
}
String publik buatXML(){
String strXML = nol;
Dokumen dokumen = DocumentHelper.createDocument();
Elemen root = document.addElement("root");
Elemen telepon = root.addElement("TelePhone");
Elemen nokia = telepon.addElement("type");
nokia.addAttribute("nama", "nokia");
Elemen price_nokia = nokia.addElement("harga");
price_nokia.addText("599");
Elemen operator_nokia = nokia.addElement("operator");
operator_nokia.addText("CMCC");
Elemen xiaomi = phone.addElement("type");
xiaomi.addAttribute("nama", "xiaomi");
Elemen price_xiaomi = xiaomi.addElement("harga");
price_xiaomi.addText("699");
Elemen operator_xiaomi = xiaomi.addElement("operator");
operator_xiaomi.addText("ChinaNet");
//--------
StringWriter strWtr = StringWriter baru();
Format OutputFormat = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter xmlWriter = XMLWriter baru(strWtr, format);
mencoba {
xmlWriter.write(dokumen);
} tangkapan (IOException e1) {
// TODO Blok tangkapan yang dibuat secara otomatis
e1.printStackTrace();
}
strXML = strWtr.toString();
//--------
//-------
//strXML=dokumen.asXML();
//------
//-------------
File file = File baru("TelePhone.xml");
if (file.ada()) {
file.hapus();
}
mencoba {
file.createNewFile();
XMLWriter keluar = XMLWriter baru(FileWriter(file) baru);
keluar.tulis(dokumen);
keluar.flush();
keluar.tutup();
} tangkapan (IOException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
//-------------
kembalikan strXML;
}
kekosongan publik parserXML(String strXML){
Pembaca SAXReader = SAXReader baru();
StringReader sr = StringReader baru(strXML);
InputSource adalah = InputSource baru(sr);
mencoba {
Dokumen dokumen = reader.read(is);
Elemen root = document.getRootElement();
//dapatkan elemen
Daftar<Elemen> phoneList = root.elements("TelePhone");
Daftar<Elemen> typeList = phoneList.get(0).elements("type");
untuk (int i=0;i<typeList.size();i++){
Elemen elemen = typeList.get(i);
String phoneName = elemen.attributeValue("nama");
System.out.println("namatelepon = "+Namatelepon);
//dapatkan semua elemen
Daftar<Elemen> Daftar anak = elemen.elemen();
untuk (int j=0;j<childList.size();j++){
Elemen e = childList.get(j);
System.out.println(e.getName()+"="+e.getText());
}
}
} tangkapan (DocumentException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
}
public void parserXMLbyXPath(String strXML){
Pembaca SAXReader = SAXReader baru();
StringReader sr = StringReader baru(strXML);
InputSource adalah = InputSource baru(sr);
mencoba {
Dokumen dokumen = reader.read(is);
Daftar daftar = document.selectNodes("/root/TelePhone/type");
untuk(int i=0;i<daftar.ukuran();i++){
Elemen e = (Elemen) list.get(i);
System.out.println("namatelepon="+e.attributeValue("nama"));
Daftar list1 = e.selectNodes("./*");
untuk(int j=0;j<daftar1.ukuran();j++){
Elemen e1 = (Elemen) list1.get(j);
Sistem.keluar.println(e1.getName()+"="+e1.getText());
}
}
} tangkapan (DocumentException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
}
/**
* @param argumen
*/
public static void main(String[] args) {
// TODO Stub metode yang dibuat secara otomatis
Pengendali XMLHandler = XMLHandler baru();
String strXML=handler.createXML();
Sistem.keluar.println(strXML);
handler.parserXML(strXML);
Sistem.keluar.println("-----------");
handler.parserXMLbyXPath(strXML);
}
}
5)XPATH
(1) Pendahuluan
XPath adalah bahasa untuk mencari informasi dalam dokumen XML. XPath digunakan untuk menavigasi elemen dan atribut dalam dokumen XML.
Untuk pengenalan sintaksis spesifik, silakan merujuk ke: http://w3school.com.cn/xpath/index.asp
(2) Kode contoh:
Copy kode kodenya sebagai berikut:
impor java.io.IOException;
impor java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
impor javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
impor javax.xml.xpath.XPath;
impor javax.xml.xpath.XPathConstants;
impor javax.xml.xpath.XPathExpression;
impor javax.xml.xpath.XPathExpressionException;
impor javax.xml.xpath.XPathFactory;
impor org.w3c.dom.Dokumen;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
XMLHandler kelas publik {
XMLHandler publik() {
// TODO Stub konstruktor yang dibuat secara otomatis
}
kekosongan publik parserXML(String strXML){
Pabrik DocumentBuilderFactory = DocumentBuilderFactory.newInstance();
mencoba {
Pembuat DocumentBuilder = pabrik.newDocumentBuilder();
StringReader sr = StringReader baru(strXML);
InputSource adalah = InputSource baru(sr);
Dokumen doc = builder.parse(is);
XPathFactory xFactory = XPathFactory.newInstance();
XPath xpath = xFactory.newXPath();
XPathExpression expr = xpath.compile("/root/TelePhone/type");
Telepon NodeList = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
for (int i = 0; i < ponsel.getLength(); i++) {
Jenis simpul = ponsel.item(i);
String phoneName = ((Elemen)type).getAttribute("nama");
System.out.println("Nama Telepon = "+Nama Telepon);
XPathExpression expr1 = xpath.kompilasi("./*");
Daftar NodeList = (NodeList) expr1.evaluate(tipe, XPathConstants.NODESET);
for(int j =0;j<daftar.getLength();j++){
Elemen e1 = (Elemen) list.item(j);
Sistem.keluar.println(e1.getNodeName()+"="+e1.getTextContent());
}
}
} tangkapan (ParserConfigurationException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}menangkap (SAXException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
} tangkapan (IOException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}menangkap (XPathExpressionException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
}
/**
* @param argumen
*/
public static void main(String[] args) {
// TODO Stub metode yang dibuat secara otomatis
String strXML="<?xml version=/"1.0/" pengkodean=/"UTF-8/" standalone=/"no/"?>"+
"<akar>"+
"<Telepon>"+
"<ketik nama="nokia/">"+
"<harga>599</harga>"+
"<operator>CMCC</operator>"+
"</tipe>"+
"<ketik nama="xiaomi/">"+
"<harga>699</harga>"+
"<operator>ChinaNet</operator>"+
"</tipe>"+
"</Telepon>"+
"</akar>";
Pengendali XMLHandler = XMLHandler baru();
handler.parserXML(strXML);
}
}
PS: Berikut beberapa alat online untuk operasi xml untuk referensi Anda:
Alat konversi XML/JSON online:
http://tools.VeVB.COM/code/xmljson
XML pemformatan online/XML kompresi online:
http://tools.VeVB.COM/code/xmlformat
Alat kompresi/pemformatan online XML:
http://tools.VeVB.COm/code/xml_format_compress