Baru-baru ini, saya telah mengerjakan kerangka platform yang efisien. Tampilan beranda yang dapat dikonfigurasi, tetapi setelah bekerja keras selama dua minggu, mungkin setelah fungsi diimplementasikan, saya menyadari bahwa ini bukan yang ingin saya lakukan. Minggu belum terbuang, dan saya telah belajar banyak darinya.
Saat membangun sistem, saya sering menemukan kebutuhan untuk membaca XML. Hampir sama, saya menemukan bahwa, mengapa saya tidak merangkum semua operasi ini ke dalam kelas dan memanggil mereka secara langsung saat menggunakannya? , dengan mentalitas ini terus memeriksa secara online (karena saya benar -benar merasa ada sesuatu yang online, jika saya merangkumnya sendiri, kepala saya benar -benar akan mendapatkan air).
Tampilan Kode Sumber:
Salinan kode adalah sebagai berikut:
paket com.gxpt.struts2;
impor java.io.file;
impor java.io.filewriter;
impor java.util.iterator;
impor java.util.list;
impor java.util.map;
impor org.dom4j.attribute;
impor org.dom4j.document;
impor org.dom4j.documentException;
impor org.dom4j.documenthelper;
impor org.dom4j.element;
impor org.dom4j.io.outputformat;
impor org.dom4j.io.saxreader;
impor org.dom4j.io.xmlwriter;
TestAddDeletexml kelas publik {
dokumen dokumen pribadi;
FilePath string pribadi; // jalur fisik yang sebenarnya di mana file berada
// Writelog pribadi Writelog;
public static void main (string [] args) melempar DocumentException {
// string filePath = system.getProperty ("user.dir")+"/xmlfiles/localserviceScconfig.xml";
String filepath = "f: // java proyek // platform universitas // demo // gxpt // webcontent // limits // manager.txt";
operator testAddDeletexml = testAddDeletexml baru (filepath);
operator.getXmlFile ();
// peta peta = hashmap baru ();
//map.put("id "," m1 ");
//map.put("name","module1 ");
//map.put("Url "," index1.jsp ");
//operator.addchild("Div "," div9 "," module "," ", peta);
//operator.updatechild("Style "," "," Div "," Asdfasdf ", 1);
operator.deletechildone ("style", "", "div", "div11");
//operator.deletechild("div "," div9 "," module ");
// string str = operator.getChild ("div", "div8", "module");
//System.out.println(str);
// elemen root = document.getrooteLement (); // Dapatkan nama simpul root
}
public testAddDeletexml (string filepath) {
this.document = null;
this.filepath = filepath;
// writelog = new writelog ();
}
/**
* Buat file xml
* @param rootname: nama simpul root
*/
public void createxmlFile (String rootName) {
if (! fileexist ()) {
this.document = documenthelper.createdocument ();
this.document.addelement (rootname);
savexmlfile (this.document);
}
}
/**
* Dapatkan dokumen XML yang ada
* @kembali
*/
dokumen publik getxmlfile () {
if (fileExist ()) {
Saxreader Reader = SaxReader baru ();
mencoba {
this.document = reader.read (file baru (filepath));
} catch (DocumentException e) {
// string loginfo = stacktracetoString.getExceptiontrace (e);
// writelog.writelogtoend ("localserverManager", loginfo);
} Akhirnya{
pembaca = null;
}
} kalau tidak {
// menulis log
// string loginfo = "file xml tidak ada, baca kesalahan!";
// writelog.writelogtoend ("localserverManager", loginfo);
System.exit (0);
}
mengembalikan ini. Dokumen;
}
/**
* Tambahkan elemen
* @param Fatherpath: Nama simpul induk
* @param fatherattr: atribut node induk
* @param Childname: Nama simpul yang akan ditambahkan
* @param childValue: Nilai simpul yang akan ditambahkan
*/
public void addChild (string fadynode, string fatherattr, string childname, string childValue, peta mAPATtr) {
Childoperator (ayahnode, ayah, anak -anak, nilai anak, "tambahkan", MAPATTR, 0);
}
/**
* Ubah elemen
* @param Fatherpath: Nama simpul induk
* @param fatherattr: atribut node induk
* @param Childname: Nama simpul yang akan dimodifikasi
* @param ChildValue: Nilai simpul yang akan dimodifikasi
*/
public void updateChild (string fadynode, string fatherattr, string childname, string childValue, int updateid) {
Childoperator (ayahnode, ayah, anak perempuan, nilai anak, "pembaruan", null, updatid);
}
/**
* Hapus elemen
* @param Fatherpath: Nama simpul induk
* @param fatherattr: atribut node induk
* @param nirkname: nama node yang akan dihapus
*/
public void deleteChild (String FadingNode, String FatherAttr, String ChildName) {
Childoperator (ayahnode, ayah, anak, "", "hapus", null, 0);
}
/**
* Hapus elemen
* @param Fatherpath: Nama simpul induk
* @param fatherattr: atribut node induk
* @param nirkname: nama node yang akan dihapus
*/
public void deleteChildall (String fadynode, string stadyattr, string childname) {
Childoperator (ayahnode, ayah, anak, "", "deleteall", null, 0);
}
/**
* Hapus elemen
* @param Fatherpath: Nama simpul induk
* @param fatherattr: atribut node induk
* @param nirkname: nama node yang akan dihapus
*/
public void deleteChildone (String fadynode, string fatherattr, string childname, string childValue) {
Childoperator (ayahnode, ayah, anak perempuan, nilai anak, "deleteOne", null, 0);
}
/**
* Dapatkan nilai elemen
* @param Fatherpath: Nama simpul induk
* @param fatherattr: atribut node induk
* @param nirkname: nama node yang akan dihapus
*/
Public String getChild (String FadingNode, String PastorTtr, String ChildName) {
Hasil string = "";
Hasil = anak -anak (ayahnode, ayah, anak, "", "dapatkan", null, 0);
hasil pengembalian;
}
/**
* Operasi simpul anak
* @param fathernode: nama simpul induk
* @param fatherattr: atribut node induk
* @param Childname: Node yang akan dimodifikasi
* @param childValue: nilai simpul yang dimodifikasi
* Operator @param: Nama operasi yang akan dilakukan
*/
Private Synchronized String ChildOperator (String Pastornode, String PastorTtr, String ChildName, String ChildValue, Operator String, Peta MAPaTtr, int UpdateID) {
Hasil string = "";
if (this.document == null) {
mengembalikan "null";
}
Elemen root = this.document.getrooteLement (); // Dapatkan nama simpul root
if (! root.getName (). Equals (fadynode)) {// Jika tidak ditambahkan di bawah node root
Hasil = xmlelementoperator (root, ayah, ayah, nama anak, nilai anak, operator, mAPATTR);
}kalau tidak{
if (operator.equals ("add")) {
Elemen childElement = root.addelement (childName); // Nilai atribut elemen tidak ada di node root
Childelement.setAttributeValue ("ID", ChildValue);
savexmlfile (this.document);
} lain if (operator.equals ("update")) {
Daftar anak -anak = root.elements (chingname);
// untuk (Iterator Children = childlements.iterator (); childs.hasnext ();) {
// elemen semua orang = (elemen) childs.next ();
// semua orang.
// semua orang.setAttributeValue ("id", childValue);
Elemen semua orang = (elemen) childelements.get (updateId);
semua orang.
//}
savexmlfile (this.document);
} lain if (operator.equals ("delete")) {
Daftar anak -anak = root.elements (childName); // Dapatkan semua node anak di bawah node saat ini, menilai nilai -nilai mereka, dan memodifikasinya
untuk (Iterator Children = childlements.iterator (); childs.hasnext ();) {
Elemen semua orang = (elemen) childs.next ();
Daftar anak -anak1 = semua orang. Elemen ("modul");
untuk (Iterator Children1 = Childelements1.iterator (); Childs1.hasnext ();) {
Elemen semua orang1 = (elemen) childs1.next ();
semua orang.
}
}
savexmlfile (this.document);
} lain jika (operator.equals ("get")) {
Daftar anak -anak = root.elements (childName); // Dapatkan semua node anak di bawah node saat ini, menilai nilai -nilai mereka, dan memodifikasinya
untuk (Iterator Children = childlements.iterator (); childs.hasnext ();) {
Elemen semua orang = (elemen) childs.next ();
hasil = semua orang.getText ();
}
savexmlfile (this.document);
} lain jika (operator.equals ("deleteOne")) {
Daftar anak -anak = root.elements (childName); // Dapatkan semua node anak di bawah node saat ini, menilai nilai -nilai mereka, dan memodifikasinya
untuk (Iterator Children = childlements.iterator (); childs.hasnext ();) {
Elemen semua orang = (elemen) childs.next ();
String divelement = everyly.attributeValue ("id");
if (divelement.equals (childValue)) {
root.remove (semua orang);
}
}
savexmlfile (this.document);
} lain jika (operator.equals ("deleteall")) {
Daftar anak -anak = root.elements (); // Dapatkan semua node anak di bawah node saat ini, menilai nilai -nilai mereka, dan memodifikasinya
untuk (Iterator Children = childlements.iterator (); childs.hasnext ();) {
Elemen semua orang = (elemen) childs.next ();
Daftar childDiv = semua orang.
untuk (iterator childRendiv = childDiv.iterator (); childsdiv.hasnext ();) {
Elemen everyonediv = (elemen) childsdiv.next ();
semua orang.
}
}
}
savexmlfile (this.document);
}
hasil pengembalian;
}
/**
* Operasi Elemen Rekursif
* @param elemen: elemen menjadi rekursif
* @param fathernode: nama simpul induk
* @param fatherattr: atribut node induk
* @param Childname: Node yang akan dioperasikan
* @param childValue: Nilai simpul setelah operasi
* Operator @param: Nama operasi yang akan dilakukan
*/
Private Synchronized String XMLeLementOperator (Elemen Elemen, String Pastornode, String PastorTtr, String ChildName, String ChildValue, String Operator, Peta MAPATtr) {
Hasil string = "";
Elemen daftar = elemen.elements ();
untuk (iterator it = elements.iterator (); it.hasnext ();) {
Elemen currentElement = (elemen) it.next ();
If (! CurrentElement.getName (). Equals (fadynode)) {// Lanjutkan mencari ketika elemen saat ini bukan elemen induk yang kita cari
Xmlelementoperator (CurrentElement, ayahnode, ayah, nama anak, nilai anak, operator, mAPATTR); // panggilan rekursif
}kalau tidak{
if (currentElement.attributeCount ()> 0) {// Ketika elemen saat ini memiliki nilai atribut, itu adalah
untuk (iterator list = currentElement.attributeIterator (); list.hasnext ();) {// Transfer nilai atribut
Attribute attr = (atribut) list.next (); // Dapatkan elemen pertama dalam antrian nilai atribut
if (attr.getValue (). Equals (fatherAttr)) {// Tentukan elemen induk unik berdasarkan nilai atribut
if (operator.equals ("add")) {// tambahkan elemen
Elemen childElement = currentElement.addelement (childName);
ChildElement.SetText (ChildValue);
Iterator itmapattr = mAPATtr.keyset (). Iterator ();
while (itmapattr.hasnext ()) {
String key = (string) itmapattr.next ();
Nilai string = mAPATtr.get (key) .toString ();
ChildeLement.SetAttributeValue (kunci, nilai);
}
// childelement.setattributeValue ("id", "m1");
// Childelement.setAttributeValue ("Name", "Module1");
// childelement.setattributeValue ("url", "index1.jsp");
} else if (operator.equals ("update")) {// ubah elemen
Daftar anak -anak = CurrentElement.elements (ChildName); // Dapatkan semua node anak di bawah node saat ini, menilai nilai -nilai mereka, dan memodifikasinya
untuk (Iterator Children = childlements.iterator (); childs.hasnext ();) {
Elemen semua orang = (elemen) childs.next ();
Semua orang.
}
} lain jika (operator.equals ("delete")) {// hapus elemen yang ditentukan
Daftar anak -anak = currentElement.elements (); // Dapatkan semua node anak di bawah node saat ini, menilai nilai -nilai mereka, dan memodifikasinya
untuk (Iterator Children = childlements.iterator (); childs.hasnext ();) {
Elemen semua orang = (elemen) childs.next ();
CurrentElement.remove (semua orang);
}
} lain jika (operator.equals ("get")) {
Daftar anak -anak = CurrentElement.elements (ChildName); // Dapatkan semua node anak di bawah node saat ini, menilai nilai -nilai mereka, dan memodifikasinya
untuk (Iterator Children = childlements.iterator (); childs.hasnext ();) {
Elemen semua orang = (elemen) childs.next ();
// result = everyly.getText ();
hasil = semua orang.
}
}
kalau tidak{
// menulis log
// string loginfo = "operator xmlfile tidak ada!";
// writelog.writelogtoend ("localserverManager", loginfo);
}
}
}
}
}
}
savexmlfile (this.document);
hasil pengembalian;
}
/**
* Simpan file xml
* Dokumen @param: Nama file XML
*/
private void savexmlfile (dokumen dokumen) {
mencoba {
OutputFormat format = outputFormat.createPrettyPrint ();
format.setencoding ("UTF-8");
Xmlwriter writer = xmlwriter baru (FileWriter baru (file baru (filepath)), format);
writer.write (dokumen);
writer.close ();
} catch (Exception e) {
// string loginfo = stacktracetoString.getExceptiontrace (e);
// writelog.writelogtoend ("localserverManager", loginfo);
}
}
/**
* Tentukan apakah ada file XML.
* nama file @param
* @kembali
*/
private boolean fileexist () {
java.io.file objfile = java.io.file baru (this.filepath);
if (objFile.exists ()) {
Kembali Benar;
} kalau tidak {
mengembalikan false;
}
}
}
File XML:
Salinan kode adalah sebagai berikut:
<? Xml Version = "1.0" encoding = "UTF-8"?>
<tyle>
<Div id = "Div8">
<module id = "m1" name = "module1" url = "index1.jsp"/>
<module id = "m2" name = "module2" url = "index2.jsp"/>
<module id = "m3" name = "module3" url = "index3.jsp"/>
</div>
<Div id = "Div9">
<module id = "m9" name = "module9" url = "index3.jsp"/>
<module id = "m10" name = "module10" url = "index4.jsp"/>
<module id = "m11" name = "module11" url = "index5.jsp"/>
</div>
</tyle>
Analisis: Kami menggunakan metode rekursif untuk menentukan apakah operasi untuk simpul atau node anak, yang relatif jelas di sini kami menggunakan jika penilaian untuk menentukan operasi mana yang Anda pilih. Gunakan injeksi ketergantungan, menyimpan masalah jika penilaian, tetapi saya hanya membuat demo pada waktu itu, tanpa lebih banyak optimasi.
Ringkasan: Sebenarnya tidak sulit untuk membaca XML. Untuk menulis banyak pengulangan ada masalah dengan kode yang perlu dimodifikasi berulang kali, jadi kadang -kadang, meskipun persyaratannya penting, bagaimana mengimplementasikannya sama pentingnya!