SAX解析XML檔案-遍歷
阿新 • • 發佈:2018-12-14
@Test public void saxXml() { long startTime = System.currentTimeMillis(); try { // step 1: 獲得SAX解析器工廠例項 SAXParserFactory factory = SAXParserFactory.newInstance(); // step 2: 獲得SAX解析器例項 SAXParser parser = factory.newSAXParser(); // step 3: 開始進行解析 // 傳入待解析的文件的處理器 parser.parse(new File("E:\\a\\2018111412301.xml"), new MyHandler()); } catch (Exception e) { e.printStackTrace(); } long endTime = System.currentTimeMillis(); System.out.println("執行時間:" + (endTime - startTime) + "ms"); } class MyHandler extends DefaultHandler { private int count = 0; private String value; /** * @param uri xml文件的名稱空間 * @param localName 標籤的名字 * @param qName 帶名稱空間的標籤的名字 * @param attributes 標籤的屬性集 * @Description:標籤(節點)解析開始時呼叫 * @Date: 2018/12/13 13:08 * @Method startElement * @Return void */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) { //遍歷整個xml檔案 System.out.println("<" + qName); int len = attributes.getLength(); for (int i = 0; i < len; i++) { System.out.println(attributes.getQName(i) + "=" + attributes.getValue(i));//得到節點的屬性資訊 } System.out.println(">"); /* 得到當前節點下的value值 if ("cimNARI:SubControlArea.recordApp".equals(qName)) { System.out.println("<" + qName); int len = attributes.getLength(); for (int i = 0; i < len; i++) { System.out.println(attributes.getQName(i) + "=" + attributes.getValue(i));//得到節點的屬性資訊 } System.out.println(">"); }*/ //得到當前節點的屬性資訊 節點資訊:<cim:Substation rdf:ID="210000138"> /* System.out.println("<" + qName); //當前節點 :cim:Substation if ("cim:Substation".equals(qName)) { System.out.println("<" + qName); int len = attributes.getLength(); for (int i = 0; i < len; i++) { //當前節點屬性的值:210000138 if ("210000138".equals(attributes.getValue(i))) { name = qName; System.out.println(attributes.getQName(i) + "=" + attributes.getValue(i));//得到節點的屬性資訊 } } System.out.println(">"); }*/ } /** * @param ch 當前讀取到的TextNode(文字節點)的位元組陣列 * @param start 位元組開始的位置,為0則讀取全部 * @param length 當前TextNode的長度 * @Author:SunHongchen * @Description:解析標籤的內容的時候呼叫 * @Date: 2018/12/13 13:10 * @Method characters * @Return void */ @Override public void characters(char ch[], int start, int length) { String str = new String(ch, start, length);// 將當前TextNode轉換為String if (!"\n".equals(str)) { //value = str; System.out.print(str);//"當前節點中的值===>" + } } @Override public void endElement(String uri, String localName, String qName) { //得到當前節點下的value值 /* if ("cimNARI:SubControlArea.recordApp".equals(qName)) { System.out.println(value); count++; System.out.println(count); }*/ //遍歷整個xml檔案 System.out.println("</" + qName + ">"); } }