SAX是一种事件驱动的流式XML文件处理方式,区别与DOM方式的是不需要在内存中建一棵DOM树,而是根据读取XML时遇到的标签事件来顺序处理,因此具有速度快,内存占用上的优点。SAX往往是大容量XML文件处理的首选方法,SAX读取XML相对比较简单,但是写XML就稍微比DOM方式复杂一些,网上的例子也不够全面和详细,刚好在工作中用到了XML读取和写出XML,记录下来以供参考。
读取XML文件:
首先,要读取的目标XML文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
<oes:Notifications xmlns:oes="http://xml.sax.test.com/oesAccessNotification">
<oes:Notification>
<oes:NotificationID>11111</oes:NotificationID>
<oes:NotificationType>AlarmNew</oes:NotificationType>
<oes:timeStamp>2009-02-25T08:57:17</oes:timeStamp>
<oes:Appendix>
<oes:MapItem key="key" value="value"/>
</oes:Appendix>
<oes:Content>
<alarmNew systemDN="PLMN-1/S3SN-1/SRME-BSS-2/SBSS-0">
<alarmId>400951</alarmId>
<alarmText>PIPE 0 IS SLOW OR NOT WORKING</alarmText>
<eventTime>2009-02-25T08:57:17+02:00</eventTime>
<eventType>processingError</eventType>
<perceivedSeverity>critical</perceivedSeverity>
<probableCause>0</probableCause>
<specificProblem>86600</specificProblem>
<additionalText1>A Raised by pipe supervision script, process ID 20848</additionalText1>
<additionalText2>A test additional text2</additionalText2>
<additionalText3>A test additional text3</additionalText3>
<additionalText4>A test additional text4</additionalText4>
<additionalText5>A Original Additional text: test alarm1 | Original Probable Cause: Toxic Leak1 Detected |
Original alarm time: 20090901183006+0530 | Automatic clearing:Y
</additionalText5>
<additionalText6>Original
</additionalText6>
</alarmNew>
</oes:Content>
</oes:Notification>
</oes:Notifications>
SAX读取该XML文件的过程如下:
(1).定义XML中各种标签:
class Constant {
public static final String NAME_SPACE = "xmlns:oes";
public static final String SCHEMA = "http://xml.sax.test.com/oesAccessNotification";
public static final String NOTIFICATIONS = "oes:Notifications";
public static final String NOTIFICATION = "oes:Notification";
public static final String NOTIFICATION_ID = "oes:NotificationID";
public static final String NOTIFICATION_TYPE ="oes:NotificationType";
public static final String TIME_STAMP = "oes:timeStamp";
public static final String APPENDIX = "oes:Appendix";
public static final String MAP_ITEM = "oes:MapItem";
public static final String KEY = "key";
public static final String VALUE = "value";
public static final String CONTENT = "oes:Content";
public static final String ALARM_NEW = "alarmNew";
public static final String SYSTEM_DN = "systemDN";
public static final String ALARM_ID = "alarmId";
public static final String ALRAM_TEXT = "alarmText";
public static f