Кратко поговорим о первых трёх способах:
Метод DOM: лично я понимаю, что XmlDocument, аналогичный .net, не эффективен при анализе, занимает память и не подходит для анализа больших XML;
Метод SAX: синтаксический анализ на основе событий. При анализе определенной части xml будет вызвано определенное событие. Вы можете определить, что делать, когда событие срабатывает, в специальном классе синтаксического анализа. Лично я считаю, что это очень альтернативный вариант. кстати, интересно, есть ли аналогичный метод в системе .Net?
Метод StAX: лично я понимаю, что он похож на метод XmlReader .net, который очень эффективен, занимает меньше памяти и подходит для анализа больших XML;
Однако метод SAX использовался и раньше. В этой статье в основном рассматривается JAXB. Здесь размещен только основной код:
импортировать org.xml.sax.Attributes;
импортировать org.xml.sax.SAXException;
импортировать org.xml.sax.helpers.DefaultHandler;
общественный класс ConfigParser расширяет DefaultHandler {
частная строка currentConfigSection;
общественный SysConfigItem sysConfig;
общественный список <InterfaceConfigItem> интерфейсConfigList;
общедоступный список <FtpConfigItem> ftpConfigList;
общедоступный список адаптерConfigList;
public void startDocument() выдает исключение SAXException {
sysConfig = новый SysConfigItem ();
InterfaceConfigList = новый ArrayList<InterfaceConfigItem>();
ftpConfigList = новый ArrayList<FtpConfigItem>();
адаптерConfigList = новый ArrayList<AdapterConfigItem>();
}
public void endDocument() выдает исключение SAXException {
}
public void startElement (String uri, String localName, String qName, атрибуты Attributes) выдает исключение SAXException {
if (qName.equalsIgnoreCase("Item") && атрибуты.getLength() > 0) {
if (currentConfigSection.equalsIgnoreCase("SysConfigItem")) {
sysConfig = новый SysConfigItem (атрибуты);
} else if (currentConfigSection.equalsIgnoreCase("InterfaceConfigItems")) {
InterfaceConfigList.add(новый InterfaceConfigItem(атрибуты));
} else if (currentConfigSection.equalsIgnoreCase("FtpConfigItems")) {
ftpConfigList.add(новый FtpConfigItem(атрибуты));
} else if (currentConfigSection.equalsIgnoreCase("AdapterConfigItems")) {
адаптерConfigList.add(новый AdaptorConfigItem(атрибуты));
}
} еще {
currentConfigSection = qName;
}
}
public void endElement(String uri, String localName, String qName) выдает исключение SAXException {
}
общественные недействительные символы (char ch[], int start, int length) выбрасывает SAXException {
}
}
импортировать org.xml.sax.Attributes;
общественный класс ConfigItemBase {
частный статический DateFormat dateFormat = new SimpleDateFormat("гггг-ММ-дд ЧЧ:мм:сс");
общественный ConfigItemBase () {
}
/**
* В настоящее время поддерживаются только несколько распространенных типов. Если вам нужна поддержка других типов, измените код здесь.
*
* Атрибуты @param
*/
public ConfigItemBase (атрибуты атрибутов) {
Class<?> cls = this.getClass();
Field[] поля = cls.getDeclaredFields();
for (Поле поля: поля) {
Строка fieldType = field.getType().getSimpleName();
for (int i = 0; i <attributes.getLength(); i++) {
if (attributes.getQName(i).equalsIgnoreCase(field.getName())) {
поле.setAccessible(истина);
пытаться {
if (fieldType.equalsIgnoreCase("String")) {
field.set(this, атрибуты.getValue(attributes.getQName(i)));
} else if (fieldType.equalsIgnoreCase("Integer")) {
field.set(this, Integer.valueOf(attributes.getValue(attributes.getQName(i))));
} else if (fieldType.equalsIgnoreCase("Double")) {
field.set(this, Double.valueOf(attributes.getValue(attributes.getQName(i))));
} else if (fieldType.equalsIgnoreCase("Дата")) {
field.set(this, GetDate(attributes.getValue(attributes.getQName(i))));
} еще {
System.out.println("Внимание: Поле Unhandler(" + field.getName() + "-" + fieldType + ")");
}
} catch (IllegalArgumentException e) {
е.printStackTrace();
} catch (IllegalAccessException e) {
е.printStackTrace();
}
перерыв;
}
}
}
}
публичная строка toString() {
Строковый результат = "";
Class<?> cls = this.getClass();
Строка classNameString = cls.getName();
result += classNameString.substring(classNameString.lastIndexOf('.') + 1, classNameString.length()) + ":";
Field[] поля = cls.getDeclaredFields();
for (Поле поля: поля) {
пытаться {
result += field.getName() + "=" + field.get(this) + ";";
} catch (IllegalArgumentException e) {
е.printStackTrace();
} catch (IllegalAccessException e) {
е.printStackTrace();
}
}
вернуть результат;
}
/**
* Атрибуты типа времени обработки (требования к формату времени: гггг-ММ-дд чч:мм:сс)
*
* @param dateString
* @возвращаться
*/
частная статическая дата GetDate (String dateString) {
Дата дата = ноль;
пытаться {
дата = dateFormat.parse(dateString);
} catch (ParseException e) {
е.printStackTrace();
}
дата возвращения;
}
}
@XmlElement(name = "msgTransactionID")
частная строка msgTransactionId = "";
@XmlElement(name = "reqNum")
частная строка reqNum = "";
@XmlElement(name = "reqBody")
частный список <BatchSyncOrderRelationReqBody> reqBodyList;
общественный BatchSyncOrderRelationReq () {
}
публичная строка getMsgTransactionId() {
вернуть this.msgTransactionId;
}
общественная недействительность setMsgTransactionId (String msgTransactionId) {
this.msgTransactionId = msgTransactionId;
}
публичная строка getReqNum() {
вернуть this.reqNum;
}
общественный недействительный setReqNum (String reqNum) {
this.reqNum = reqNum;
}
публичный список<BatchSyncOrderRelationReqBody> getReqBodyList() {
вернуть this.reqBodyList;
}
public void setReqBodyList(List<BatchSyncOrderRelationReqBody> reqBodyList) {
this.reqBodyList = reqBodyList;
}
@Override
public BatchSyncOrderRelationReq Deserialized (String interBossXmlContent) выдает BusinessException {
пытаться {
// десериализуем для головы
JAXBContext jaxbCxt4Head = JAXBContext.newInstance(MessageHead.class);
Unmarshaller unmarshaller4Head = jaxbCxt4Head.createUnmarshaller();
MessageHead head = (MessageHead) unmarshaller4Head.unmarshal (новый StringReader (interBossXmlContent));
// десериализация для тела SyncOrderRelationReq
JAXBContext jaxbCxt4Body = JAXBContext.newInstance(BatchSyncOrderRelationReq.class);
Unmarshaller unmarshaller4Body = jaxbCxt4Body.createUnmarshaller();
BatchSyncOrderRelationReqatchSyncOrderRelationReq = (BatchSyncOrderRelationReq) unmarshaller4Body.unmarshal(new StringReader(head.getSvcCont().trim()));
BatchSyncOrderRelationReq.setHead(head);
вернуть пакетSyncOrderRelationReq;
} catch (JAXBException e) {
throw new BusinessException("Ошибка SyncOrderRelationReq.Deserialized()!(" + interBossXmlContent + ")", e);
}
}
}
@XmlElement(name = "oprNumb")
частная строка oprNumb = "";
@XmlElement(name = "Информация о подписке")
частная SubscriptionInfo subscribeInfo;
общественный BatchSyncOrderRelationReqBody () {
}
public BatchSyncOrderRelationReqBody (String oprNumb, SubscriptionInfo subscribeInfo) {
this.oprNumb = oprNumb;
this.subscriptionInfo = подпискаInfo;
}
публичная строка getOprNumb() {
вернуть this.oprNumb;
}
общественная недействительность setOprNumb (String oprNumb) {
this.oprNumb = oprNumb;
}
общественная информация о подписке getSubscriptionInfo () {
вернуть this.subscriptionInfo;
}
public void setSubscriptionInfo (SubscriptionInfo subscribeInfo) {
this.subscriptionInfo = подпискаInfo;
}
}
@XmlElement(name = "oprTime")
частная строка oprTime = "";
@XmlElement(name = «ID действия»)
частная строка actionId = "";
@XmlElement(name = "торговая марка")
частный бренд String = "";
@XmlElement(name = "effTime")
частная строка effTime = "";
@XmlElement(name = "expireTime")
частная строка expireTime = "";
@XmlElement(name = "feeUser_ID")
частная строка FeUserId = "";
@XmlElement(name = "destUser_ID")
частная строка destUserId = "";
@XmlElement(name = "actionReasonID")
частная строка actionReasonId = "";
@XmlElement(name = "servType")
частная строка servType = "";
@XmlElement(name = "subServType")
частная строка subServType = "";
@XmlElement(name = "SPID")
частная строка spId = "";
@XmlElement(name = "SPServID")
частная строка spServId = "";
@XmlElement(name = "accessMode")
частная строка accessMode = "";
@XmlElement(name = "feeType")
частная строка FeType = "";
общественная информация о подписке () {
}
общедоступная информация о подписке(
Строка oprTime,
Строковый идентификатор действия,
Струнная марка,
Строка effTime,
Строка expireTime,
Строковая платаUserId,
Строка destUserId,
Строка actionReasonId,
Строковый типсерва,
Строка subServType,
Строковый идентификатор,
Строка spServId,
Строковый режим доступа,
Строка FeeType) {
this.oprTime = oprTime;
this.actionId = actionId;
this.brand = бренд;
this.effTime = effTime;
this.expireTime = expireTime;
this.feeUserId = FeeUserId;
this.destUserId = destUserId;
this.actionReasonId = actionReasonId;
this.servType = servType;
this.subServType = subServType;
this.spId = spId;
this.spServId = spServId;
this.accessMode = accessMode;
this.feeType = тип комиссии;
}
публичная строка getOprTime() {
вернуть this.oprTime;
}
public void setOprTime (String oprTime) {
this.oprTime = oprTime;
}
публичная строка getActionId() {
вернуть this.actionId;
}
общественный недействительный setActionId (String actionId) {
this.actionId = actionId;
}
публичная строка getBrand() {
вернуть this.brand;
}
public void setBrand(String Brand) {
this.brand = бренд;
}
общественная строка getEffTime() {
вернуть this.effTime;
}
public void setEffTime (String effTime) {
this.effTime = effTime;
}
публичная строка getExpireTime() {
верните это.expireTime;
}
public void setExpireTime (String expireTime) {
this.expireTime = expireTime;
}
публичная строка getFeeUserId() {
верните this.feeUserId;
}
public void setFeeUserId (StringfeUserId) {
this.feeUserId = FeeUserId;
}
общественная строка getDestUserId() {
верните this.destUserId;
}
общественный недействительный setDestUserId (String destUserId) {
this.destUserId = destUserId;
}
публичная строка getActionReasonId() {
верните this.actionReasonId;
}
public void setActionReasonId (String actionReasonId) {
this.actionReasonId = actionReasonId;
}
общественная строка getServType() {
вернуть этот.servType;
}
общественный недействительный setServType (String servType) {
this.servType = servType;
}
общественная строка getSubServType() {
верните этот.subServType;
}
общественный недействительный setSubServType (String subServType) {
this.subServType = subServType;
}
публичная строка getSpId() {
вернуть этот.spId;
}
общественный недействительный setSpId (String spId) {
this.spId = spId;
}
публичная строка getSpServId() {
вернуть this.spServId;
}
общественный недействительный setSpServId (String spServId) {
this.spServId = spServId;
}
публичная строка getAccessMode() {
верните этот.accessMode;
}
public void setAccessMode (String accessMode) {
this.accessMode = accessMode;
}
публичная строка getFeeType() {
вернуть this.feeType;
}
public void setFeeType (String FeeType) {
this.feeType = тип комиссии;
}
}