Hablemos brevemente de los primeros tres métodos:
Método DOM: personalmente entiendo que XmlDocument similar a .net no es eficiente al analizar, ocupa memoria y no es adecuado para analizar XML grandes;
Método SAX: análisis basado en eventos. Cuando se analiza una determinada parte de xml, se activará un evento específico. Puede definir qué hacer cuando se activa el evento en una clase de análisis personalizada. De alguna manera, me pregunto si existe un método similar en el sistema .Net.
Método StAX: personalmente entiendo que es similar al método XmlReader de .net, que es muy eficiente, ocupa menos memoria y es adecuado para analizar XML de gran tamaño;
Sin embargo, el método SAX se ha utilizado antes. Este artículo presenta principalmente JAXB. Aquí solo se publica el código principal:
importar org.xml.sax.Attributes;
importar org.xml.sax.SAXException;
importar org.xml.sax.helpers.DefaultHandler;
la clase pública ConfigParser extiende DefaultHandler {
Cadena privada currentConfigSection;
público SysConfigItem sysConfig;
Lista pública<InterfaceConfigItem> interfaceConfigList;
Lista pública<FtpConfigItem> ftpConfigList;
Lista pública<AdapterConfigItem> adaptorConfigList;
startDocument public void() lanza SAXException {
sysConfig = nuevo SysConfigItem();
interfaceConfigList = new ArrayList<InterfaceConfigItem>();
ftpConfigList = nueva ArrayList<FtpConfigItem>();
adaptorConfigList = new ArrayList<AdapterConfigItem>();
}
endDocument public void() lanza SAXException {
}
public void startElement (String uri, String localName, String qName, Atributos de atributos) lanza SAXException {
if (qName.equalsIgnoreCase("Artículo") && atributos.getLength() > 0) {
si (currentConfigSection.equalsIgnoreCase("SysConfigItem")) {
sysConfig = nuevo SysConfigItem(atributos);
} else if (currentConfigSection.equalsIgnoreCase("InterfaceConfigItems")) {
interfaceConfigList.add(new InterfaceConfigItem(atributos));
} más si (currentConfigSection.equalsIgnoreCase("FtpConfigItems")) {
ftpConfigList.add(nuevo FtpConfigItem(atributos));
} else if (currentConfigSection.equalsIgnoreCase("AdapterConfigItems")) {
adaptorConfigList.add (nuevo AdapterConfigItem (atributos));
}
} demás {
currentConfigSection = qName;
}
}
endElement public void (String uri, String localName, String qName) lanza SAXException {
}
caracteres públicos vacíos (char ch[], int inicio, int longitud) lanza SAXException {
}
}
importar org.xml.sax.Attributes;
clase pública ConfigItemBase {
formato de fecha estático privado formato de fecha = nuevo SimpleDateFormat ("aaaa-MM-dd HH: mm: ss");
ConfigItemBase pública() {
}
/**
* Actualmente, solo se admiten algunos tipos comunes. Si necesita admitir otros tipos, modifique el código aquí.
*
* @param atributos
*/
public ConfigItemBase (atributos de atributos) {
Clase<?> cls = this.getClass();
Campo[] campos = cls.getDeclaredFields();
para (campo campo: campos) {
Cadena tipo de campo = campo.getType().getSimpleName();
para (int i = 0; i < atributos.getLength(); i++) {
if (attributes.getQName(i).equalsIgnoreCase(field.getName())) {
campo.setAccessible(verdadero);
intentar {
si (fieldType.equalsIgnoreCase("Cadena")) {
campo.set(esto, atributos.getValue(atributos.getQName(i)));
} más si (fieldType.equalsIgnoreCase("Entero")) {
field.set(this, Integer.valueOf(atributos.getValue(atributos.getQName(i))));
} else if (fieldType.equalsIgnoreCase("Doble")) {
field.set(this, Double.valueOf(atributos.getValue(atributos.getQName(i))));
} else if (fieldType.equalsIgnoreCase("Fecha")) {
field.set(this, GetDate(atributos.getValue(atributos.getQName(i))));
} demás {
System.out.println("Advertencia: Unhandler Field(" + field.getName() + "-" + fieldType + ")");
}
} captura (IllegalArgumentException e) {
e.printStackTrace();
} captura (IllegalAccessException e) {
e.printStackTrace();
}
romper;
}
}
}
}
cadena pública toString() {
Resultado de cadena = "";
Clase<?> cls = this.getClass();
Cadena classNameString = cls.getName();
resultado += classNameString.substring(classNameString.lastIndexOf('.') + 1, classNameString.length()) + ":";
Campo[] campos = cls.getDeclaredFields();
para (campo campo: campos) {
intentar {
resultado += campo.getName() + "=" + campo.get(esto) + ";";
} captura (IllegalArgumentException e) {
e.printStackTrace();
} captura (IllegalAccessException e) {
e.printStackTrace();
}
}
resultado de devolución;
}
/**
* Atributos de tipo de tiempo de proceso (el formato de tiempo requerido es: aaaa-MM-dd hh:mm:ss)
*
* @param cadena de fecha
* @devolver
*/
Fecha estática privada GetDate (String dateString) {
Fecha fecha = nulo;
intentar {
fecha = dateFormat.parse(dateString);
} captura (ParseException e) {
e.printStackTrace();
}
fecha de regreso;
}
}
@XmlElement(nombre = "msgTransactionID")
cadena privada msgTransactionId = "";
@XmlElement(nombre = "reqNum")
número de solicitud de cadena privada = "";
@XmlElement(nombre = "reqBody")
Lista privada<BatchSyncOrderRelationReqBody> reqBodyList;
pública BatchSyncOrderReqReq() {
}
cadena pública getMsgTransactionId() {
devolver this.msgTransactionId;
}
setMsgTransactionId público vacío (String msgTransactionId) {
this.msgTransactionId = msgTransactionId;
}
cadena pública getReqNum() {
devolver this.reqNum;
}
setReqNum vacío público (String reqNum) {
this.reqNum = reqNum;
}
Lista pública<BatchSyncOrderRelationReqBody> getReqBodyList() {
devolver this.reqBodyList;
}
setReqBodyList público vacío (List<BatchSyncOrderRelationReqBody> reqBodyList) {
this.reqBodyList = reqBodyList;
}
@Anular
público BatchSyncOrderRelationReq Deserialized (String interBossXmlContent) lanza BusinessException {
intentar {
// deserializado para la cabeza
JAXBContext jaxbCxt4Head = JAXBContext.newInstance(MessageHead.class);
Unmarshaller unmarshaller4Head = jaxbCxt4Head.createUnmarshaller();
MessageHead head = (MessageHead) unmarshaller4Head.unmarshal(new StringReader(interBossXmlContent));
// deserializado para el cuerpo SyncOrderRelationReq
JAXBContext jaxbCxt4Body = JAXBContext.newInstance(BatchSyncOrderReq.class);
Unmarshaller unmarshaller4Body = jaxbCxt4Body.createUnmarshaller();
BatchSyncOrderRelationReq batchSyncOrderRelationReq = (BatchSyncOrderRelationReq) unmarshaller4Body.unmarshal(new StringReader(head.getSvcCont().trim()));
loteSyncOrderRelationReq.setHead(cabeza);
devolver loteSyncOrderRelationReq;
} captura (JAXBException e) {
throw new BusinessException("¡Error SyncOrderRelationReq.Deserialized()!(" + interBossXmlContent + ")", e);
}
}
}
@XmlElement(nombre = "oprNumb")
cadena privada oprNumb = "";
@XmlElement(nombre = "infosuscripción")
Información de suscripción privada Información de suscripción;
público BatchSyncOrderRelationReqBody(){
}
público BatchSyncOrderRelationReqBody (String oprNumb, SubscriptionInfo información de suscripción) {
this.oprNumb = oprNumb;
this.subscriptionInfo = información de suscripción;
}
cadena pública getOprNumb() {
devolver this.oprNumb;
}
setOprNumb vacío público (String oprNumb) {
this.oprNumb = oprNumb;
}
Información de suscripción pública getInfo de suscripción() {
devolver this.subscriptionInfo;
}
public void setSubscriptionInfo (SubscriptionInfo información de suscripción) {
this.subscriptionInfo = información de suscripción;
}
}
@XmlElement(nombre = "oprTime")
cadena privada oprTime = "";
@XmlElement(nombre = "ID de acción")
cadena privada actionId = "";
@XmlElement(nombre = "marca")
marca de cadena privada = "";
@XmlElement(nombre = "effTime")
cadena privada effTime = "";
@XmlElement(nombre = "tiempo de caducidad")
cadena privada expireTime = "";
@XmlElement(nombre = "feeUser_ID")
tarifa de cadena privadaUserId = "";
@XmlElement(nombre = "destUser_ID")
Cadena privada destUserId = "";
@XmlElement(nombre = "actionReasonID")
cadena privada actionReasonId = "";
@XmlElement(nombre = "tiposerv")
cadena privada servType = "";
@XmlElement(nombre = "subServType")
cadena privada subServType = "";
@XmlElement(nombre = "SPID")
cadena privada spId = "";
@XmlElement(nombre = "SPServID")
Cadena privada spServId = "";
@XmlElement(nombre = "mododeacceso")
modo de acceso de cadena privada = "";
@XmlElement(nombre = "tipo de tarifa")
tarifa de cadena privada = "";
Información de suscripción pública() {
}
Información de suscripción pública (
Tiempo de operación de cadena,
ID de acción de cadena,
Marca de cuerda,
Cadena effTime,
Hora de caducidad de la cadena,
Tarifa de cadenaUserId,
Cadena destUserId,
Cadena actionReasonId,
Tipo de servicio de cadena,
Cadena subServType,
spId de cadena,
Cadena spServId,
Modo de acceso a cadena,
Tipo de tarifa de cadena) {
this.oprTime = oprTime;
this.actionId = acciónId;
esta.marca = marca;
this.effTime = effTime;
this.expireTime = expiraTime;
this.feeUserId = tarifaUserId;
this.destUserId = destUserId;
this.actionReasonId = actionReasonId;
this.servType = servType;
this.subServType = subServType;
this.spId = spId;
this.spServId = spServId;
this.accessMode = accesoMode;
this.feeType = tarifaType;
}
cadena pública getOprTime() {
devolver this.oprTime;
}
setOprTime público vacío (String oprTime) {
this.oprTime = oprTime;
}
cadena pública getActionId() {
devolver este.actionId;
}
setActionId público vacío (String actionId) {
this.actionId = acciónId;
}
cadena pública getBrand() {
devolver esta.marca;
}
setBrand público vacío (marca de cadena) {
esta.marca = marca;
}
cadena pública getEffTime() {
devolver this.effTime;
}
setEffTime público vacío (String effTime) {
this.effTime = effTime;
}
cadena pública getExpireTime() {
devolver this.expireTime;
}
setExpireTime público vacío (String expireTime) {
this.expireTime = expiraTime;
}
cadena pública getFeeUserId() {
devolver this.feeUserId;
}
setFeeUserId público vacío (String feeUserId) {
this.feeUserId = tarifaUserId;
}
cadena pública getDestUserId() {
devolver this.destUserId;
}
setDestUserId público vacío (String destUserId) {
this.destUserId = destUserId;
}
cadena pública getActionReasonId() {
devolver this.actionReasonId;
}
setActionReasonId público vacío (String actionReasonId) {
this.actionReasonId = actionReasonId;
}
cadena pública getServType() {
devolver this.servType;
}
setServType público vacío (String servType) {
this.servType = servType;
}
cadena pública getSubServType() {
devolver this.subServType;
}
setSubServType público vacío (String subServType) {
this.subServType = subServType;
}
Cadena pública getSpId() {
devolver este.spId;
}
setSpId vacío público (String spId) {
this.spId = spId;
}
Cadena pública getSpServId() {
devolver this.spServId;
}
setSpServId vacío público (String spServId) {
this.spServId = spServId;
}
cadena pública getAccessMode() {
devolver this.accessMode;
}
setAccessMode público vacío (Modo de acceso de cadena) {
this.accessMode = accesoMode;
}
cadena pública getFeeType() {
devolver this.feeType;
}
setFeeType público vacío (Tipo de tarifa de cadena) {
this.feeType = tarifaType;
}
}