一、舉例讀取的文件為:test.xml
<?xml version="1.0" encoding="UTF-8"?>
<IMIXML>
<SecDef Desc="國債" CentraQuoteBondIndic="Y">
<Instrmt ID="CFT" Sym="現券買賣"/>
</SecDef>
<SecDef Desc="債券" CentraQuoteBondIndic="X">
<Instrmt ID="CCC" Sym="是否"/>
</SecDef>
</IMIXML>
二 項目結構:
三 代碼:

package parseXml; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import java.util.HashMap; public class Test extends DefaultHandler { public static SAXParserFactory parserFactory; public static SAXParser parser; public static HashMap<String, SecDef> map = new HashMap<String, SecDef>(); String xBondTransactableBondInformation_Id; // 債券代碼 SecDef secdef; Instrmt instrmt; @Override public void startDocument() { } // 讀取XML的<后開始執行 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) { if ("SecDef".equals(qName)) { secdef = new SecDef(); instrmt = new Instrmt(); secdef.setCentraQuoteBondIndic(attributes .getValue("CentraQuoteBondIndic")); secdef.setDesc(attributes.getValue("Desc")); secdef.setInstrmt(instrmt); } if ("Instrmt".equals(qName)) { xBondTransactableBondInformation_Id = attributes.getValue("ID"); instrmt.setId(attributes.getValue("ID")); instrmt.setSym(attributes.getValue("Sym")); } } @Override public void characters(char[] ch, int start, int length) { } // 讀取XML的</后開始執行 @Override public void endElement(String uri, String localName, String qName) { map.put( xBondTransactableBondInformation_Id, secdef); } @Override public void endDocument() { } /** * 解析方法 * * @return map */ public static HashMap<String, SecDef> loadXML(String filePath) { try { parserFactory = SAXParserFactory.newInstance(); parser = parserFactory.newSAXParser(); Test reader = new Test(); parser.parse(new InputSource(filePath), reader); } catch (Exception e) { e.printStackTrace(); return null; } return map; } public static HashMap<String, SecDef> resultMap; public static void main(String[] args) { resultMap = loadXML("src/input/xml/test.xml"); for (String key : resultMap.keySet()) { System.out.print("key=" + key + "\t"); System.out.println("value=" + resultMap.get(key)); } } }

package parseXml; public class SecDef { private String desc;// private String CentraQuoteBondIndic; private Instrmt instrmt; public SecDef() { } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public String getCentraQuoteBondIndic() { return CentraQuoteBondIndic; } public void setCentraQuoteBondIndic(String centraQuoteBondIndic) { CentraQuoteBondIndic = centraQuoteBondIndic; } public Instrmt getInstrmt() { return instrmt; } public void setInstrmt(Instrmt instrmt) { this.instrmt = instrmt; } @Override public String toString() { return "SecDef{" + "desc='" + desc + '\'' + ", CentraQuoteBondIndic='" + CentraQuoteBondIndic + '\'' + ", instrmt=" + instrmt + '}'; } }

package parseXml; public class Instrmt { private String id; private String sym; public Instrmt() { } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getSym() { return sym; } public void setSym(String sym) { this.sym = sym; } @Override public String toString() { return "Instrmt{" + "id='" + id + '\'' + ", sym='" + sym + '\'' + '}'; } }
四 結果: