Mari kita bahas secara singkat tentang tiga metode pertama:
Metode DOM: Saya pribadi memahami bahwa XmlDocument yang mirip dengan .net tidak efisien saat parsing, memakan memori, dan tidak cocok untuk parsing XML besar;
Metode SAX: penguraian berbasis peristiwa. Ketika bagian tertentu dari xml diurai, peristiwa tertentu akan dipicu. Anda dapat menentukan apa yang harus dilakukan ketika peristiwa tersebut dipicu di kelas parsing khusus cara., Saya ingin tahu apakah ada metode serupa di bawah sistem .Net?
Metode StAX: Saya pribadi memahaminya mirip dengan metode XmlReader .net, yang sangat efisien, menggunakan lebih sedikit memori, dan cocok untuk mengurai XML besar;
Namun, metode SAX telah digunakan sebelumnya. Artikel ini terutama memperkenalkan JAXB. Hanya kode utama yang diposting di sini:
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
kelas publik ConfigParser memperluas DefaultHandler {
String pribadi currentConfigSection;
sysConfigItem publik sysConfig;
Daftar publik<InterfaceConfigItem> interfaceConfigList;
Daftar publik<FtpConfigItem> ftpConfigList;
Daftar publik<AdapterConfigItem> adapterConfigList;
public void startDocument() melempar SAXException {
sysConfig = baru SysConfigItem();
interfaceConfigList = ArrayList baru<InterfaceConfigItem>();
ftpConfigList = ArrayList baru<FtpConfigItem>();
adapterConfigList = ArrayList baru<AdapterConfigItem>();
}
public void endDocument() melempar SAXException {
}
public void startElement(String uri, String localName, String qName, Atribut atribut) melempar SAXException {
if (qName.equalsIgnoreCase("Item") && atribut.getLength() > 0) {
if (currentConfigSection.equalsIgnoreCase("SysConfigItem")) {
sysConfig = SysConfigItem baru(atribut);
} else if (currentConfigSection.equalsIgnoreCase("InterfaceConfigItems")) {
interfaceConfigList.add(InterfaceConfigItem(atribut) baru);
} else if (currentConfigSection.equalsIgnoreCase("FtpConfigItems")) {
ftpConfigList.add(FtpConfigItem(atribut) baru);
} else if (currentConfigSection.equalsIgnoreCase("AdapterConfigItems")) {
adapterConfigList.add(AdapterConfigItem(atribut) baru);
}
} kalau tidak {
currentConfigSection = qNama;
}
}
public void endElement(String uri, String localName, String qName) melempar SAXException {
}
karakter public void (char ch[], int start, int length) melempar SAXException {
}
}
import org.xml.sax.Attributes;
kelas publik ConfigItemBase {
private static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ConfigItemBase publik() {
}
/**
* Saat ini hanya beberapa tipe umum yang didukung. Jika Anda perlu mendukung tipe lain, silakan ubah kode di sini.
*
* @param atribut
*/
public ConfigItemBase(Atribut atribut) {
Kelas<?> cls = this.getClass();
Bidang[] bidang = cls.getDeclaredFields();
untuk (Bidang bidang : bidang) {
String fieldType = field.getType().getSimpleName();
for (int i = 0; i < atribut.getLength(); i++) {
if (atribut.getQName(i).equalsIgnoreCase(field.getName())) {
field.setAccessible(benar);
mencoba {
if (fieldType.equalsIgnoreCase("String")) {
field.set(ini, atribut.getValue(atribut.getQName(i)));
} else if (fieldType.equalsIgnoreCase("Bilangan Bulat")) {
field.set(ini, Integer.valueOf(attributes.getValue(attributes.getQName(i))));
} else if (fieldType.equalsIgnoreCase("Ganda")) {
field.set(ini, Double.valueOf(attributes.getValue(attributes.getQName(i))));
} else if (fieldType.equalsIgnoreCase("Tanggal")) {
field.set(ini, GetDate(attributes.getValue(attributes.getQName(i))));
} kalau tidak {
System.out.println("Peringatan:Unhandler Field(" + field.getName() + "-" + fieldType + ")");
}
} tangkapan (IllegalArgumentException e) {
e.printStackTrace();
} tangkapan (IllegalAccessException e) {
e.printStackTrace();
}
merusak;
}
}
}
}
String publik keString() {
Hasil string = "";
Kelas<?> cls = this.getClass();
String classNameString = cls.getName();
hasil += classNameString.substring(classNameString.lastIndexOf('.') + 1, classNameString.length()) + ":";
Bidang[] bidang = cls.getDeclaredFields();
untuk (Bidang bidang : bidang) {
mencoba {
hasil += field.getName() + "=" + field.get(ini) + ";";
} tangkapan (IllegalArgumentException e) {
e.printStackTrace();
} tangkapan (IllegalAccessException e) {
e.printStackTrace();
}
}
hasil pengembalian;
}
/**
* Atribut jenis waktu proses (persyaratan format waktu adalah: yyyy-MM-dd hh:mm:ss)
*
* @param dateString
* @kembali
*/
Tanggal statis pribadi GetDate(String dateString) {
Tanggal tanggal = null;
mencoba {
tanggal = dateFormat.parse(dateString);
} tangkapan (ParseException e) {
e.printStackTrace();
}
tanggal kembali;
}
}
@XmlElement(nama = "msgTransactionID")
String pribadi msgTransactionId = "";
@XmlElement(nama = "reqNum")
pribadi String reqNum = "";
@XmlElement(nama = "reqBody")
Daftar pribadi<BatchSyncOrderRelationReqBody> reqBodyList;
publik BatchSyncOrderRelationReq() {
}
String publik getMsgTransactionId() {
kembalikan ini.msgTransactionId;
}
public void setMsgTransactionId(String msgTransactionId) {
this.msgTransactionId = msgTransactionId;
}
String publik getReqNum() {
kembalikan this.reqNum;
}
public void setReqNum(String reqNum) {
this.reqNum = reqNum;
}
Daftar publik<BatchSyncOrderRelationReqBody> getReqBodyList() {
kembalikan ini.reqBodyList;
}
public void setReqBodyList(Daftar<BatchSyncOrderRelationReqBody> reqBodyList) {
this.reqBodyList = reqBodyList;
}
@Mengesampingkan
public BatchSyncOrderRelationReq Deserialized(String interBossXmlContent) melempar BusinessException {
mencoba {
// deserialisasi untuk kepala
JAXBContext jaxbCxt4Head = JAXBContext.newInstance(MessageHead.class);
Unmarshaller unmarshaller4Head = jaxbCxt4Head.createUnmarshaller();
MessageHead head = (MessageHead) unmarshaller4Head.unmarshal(StringReader baru(interBossXmlContent));
// deserialisasi untuk isi SyncOrderRelationReq
JAXBContext jaxbCxt4Body = JAXBContext.newInstance(BatchSyncOrderRelationReq.class);
Unmarshaller unmarshaller4Body = jaxbCxt4Body.createUnmarshaller();
BatchSyncOrderRelationReq batchSyncOrderRelationReq = (BatchSyncOrderRelationReq) unmarshaller4Body.unmarshal(new StringReader(head.getSvcCont().trim()));
batchSyncOrderRelationReq.setHead(kepala);
kembalikan batchSyncOrderRelationReq;
} tangkapan (JAXBException e) {
throw new BusinessException("SyncOrderRelationReq.Deserialized() Kesalahan!(" + interBossXmlContent + ")", e);
}
}
}
@XmlElement(nama = "oprNumb")
String pribadi oprNumb = "";
@XmlElement(nama = "info langganan")
Info Langganan pribadi Info langganan;
publik BatchSyncOrderRelationReqBody(){
}
public BatchSyncOrderRelationReqBody(String oprNumb, Info Langganan, Info Langganan) {
this.oprNumb = oprNumb;
this.subscriptionInfo = info berlangganan;
}
String publik getOprNumb() {
kembalikan ini.oprNumb;
}
public void setOprNumb(String oprNumb) {
this.oprNumb = oprNumb;
}
Info Langganan publik getSubscriptionInfo() {
kembalikan ini.subscriptionInfo;
}
public void setSubscriptionInfo(Info Langganan, Info Langganan) {
this.subscriptionInfo = info berlangganan;
}
}
@XmlElement(nama = "oprTime")
String pribadi oprTime = "";
@XmlElement(nama = "actionID")
String pribadi actionId = "";
@XmlElement(nama = "merek")
merek String pribadi = "";
@XmlElement(nama = "effTime")
String pribadi effTime = "";
@XmlElement(nama = "waktu kadaluwarsa")
pribadi String expiredTime = "";
@XmlElement(nama = "feeUser_ID")
String pribadi feeUserId = "";
@XmlElement(nama = "IDPengguna Tujuan")
String pribadi destUserId = "";
@XmlElement(nama = "actionReasonID")
pribadi String actionReasonId = "";
@XmlElement(nama = "servType")
pribadi String servType = "";
@XmlElement(nama = "subServType")
pribadi String subServType = "";
@XmlElement(nama = "SPID")
String pribadi spId = "";
@XmlElement(nama = "SPServID")
String pribadi spServId = "";
@XmlElement(nama = "accessMode")
pribadi String accessMode = "";
@XmlElement(nama = "feeType")
pribadi String feeType = "";
Info Langganan publik() {
}
Info Langganan publik(
String oprWaktu,
String tindakanId,
merek tali,
String waktu efektif,
String kedaluwarsaWaktu,
Biaya stringUserId,
String tujuanUserId,
string tindakanReasonId,
Tipe serv string,
SubJenis ServString,
spId string,
String spServId,
Mode akses string,
Tipe biaya string) {
this.oprTime = oprTime;
ini.actionId = actionId;
this.brand = merek;
ini.effTime = effTime;
this.expireTime = expiredTime;
this.feeUserId = biayaUserId;
ini.destUserId = destUserId;
this.actionReasonId = actionReasonId;
this.servType = tipeserv;
this.subServType = subServType;
ini.spId = spId;
ini.spServId = spServId;
this.accessMode = accessMode;
this.feeType = feeType;
}
String publik getOprTime() {
kembalikan this.oprTime;
}
kekosongan publik setOprTime(String oprTime) {
this.oprTime = oprTime;
}
String publik getActionId() {
kembalikan ini.actionId;
}
public void setActionId(String actionId) {
ini.actionId = actionId;
}
String publik getBrand() {
kembalikan ini.merek;
}
public void setBrand(String merek) {
this.brand = merek;
}
String publik getEffTime() {
kembalikan ini.effTime;
}
public void setEffTime(String effTime) {
ini.effTime = effTime;
}
String publik getExpireTime() {
kembalikan ini.expireTime;
}
public void setExpireTime(String expiredTime) {
this.expireTime = expiredTime;
}
String publik getFeeUserId() {
kembalikan ini.feeUserId;
}
public void setFeeUserId(String feeUserId) {
this.feeUserId = biayaUserId;
}
String publik getDestUserId() {
kembalikan ini.destUserId;
}
public void setDestUserId(String destUserId) {
ini.destUserId = destUserId;
}
String publik getActionReasonId() {
kembalikan ini.actionReasonId;
}
public void setActionReasonId(String actionReasonId) {
this.actionReasonId = actionReasonId;
}
String publik getServType() {
kembalikan ini.servType;
}
public void setServType(String servType) {
this.servType = tipeserv;
}
String publik getSubServType() {
kembalikan ini.subServType;
}
public void setSubServType(String subServType) {
this.subServType = subServType;
}
String publik getSpId() {
kembalikan ini.spId;
}
kekosongan publik setSpId(String spId) {
ini.spId = spId;
}
String publik getSpServId() {
kembalikan ini.spServId;
}
public void setSpServId(String spServId) {
ini.spServId = spServId;
}
String publik getAccessMode() {
kembalikan ini.accessMode;
}
public void setAccessMode(String accessMode) {
this.accessMode = accessMode;
}
String publik getFeeType() {
kembalikan ini.feeType;
}
public void setFeeType(String feeType) {
this.feeType = feeType;
}
}