亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何對XML進行Sax解析

發布時間:2021-07-27 11:09:30 來源:億速云 閱讀:146 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關如何對XML進行Sax解析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

對XML進行Sax解析:

一、對XML進行Sax解析:

Sax解析XML是事件驅動的,安裝XML的順序一步一步進行解析的.優點不用事先調入整個文檔,占用資源少,缺點是事件過后,若沒保存數據,那么數據就丟了;無狀態性;從事件中只能得到文本,但不知該文本屬于哪個元素.

二、實現:

1.創建一個XMl文檔:

<?xml version="1.0" encoding="UTF-8"?>
<oracle >
    <user id="1" >
       <name>scott</name>
       <pwd>scott</pwd>
    </user>

    <user id="2">
       <name>sys</name>
       <pwd>sys</pwd>
    </user>

    <user id="3">
       <name>system</name>
       <pwd>system</pwd>
    </user>
    
</oracle>

2.開始解析:

package Sax解析Xml;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SaxParser {

	public static void main(String[] args) {
		
		// 1.實例化SaxParserFactory對象
		SAXParserFactory factory = SAXParserFactory.newInstance();
		try {
			// 2.創建解析器:
			SAXParser saxParser = factory.newSAXParser();

			// 3.獲取需要解析的文檔,生成解析器,解析文檔
			File xmlFile = new File("myXml\\cb.xml");
			MyHandler handler = new MyHandler();

			// 開始解析:
			saxParser.parse(xmlFile, handler);

		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static class MyHandler extends DefaultHandler {

		// 作用是來記錄解析的上一個節點的名稱
		private String preTag = null;
		
		private boolean ifEnd =false;
		private String getName;
		private String getPwd;

		@Override
		public void characters(char[] ch, int start, int length)
				throws SAXException {
			// TODO Auto-generated method stub
			// super.characters(ch, start, length);
			if (preTag != null) {
				if ("name".equals(preTag)) {		
					getName = new String(ch, start, length);
				} else if ("pwd".equals(preTag)) {
				    getPwd = new String(ch, start, length);
				    ifEnd=true;

				    System.out.println("   <name>"+getName+"</name>");
                    System.out.println("   <pwd>"+getPwd+"</pwd>");
				}

			}
		}

		@Override
		public void endDocument() throws SAXException {
			// TODO Auto-generated method stub
			// super.endDocument();
			System.out.println(" </oracle>");
			System.out.println("--------------------------");
			System.out.println("解析XML完畢");
		}

		@Override
		public void endElement(String uri, String localName, String qName)
				throws SAXException {
			// TODO Auto-generated method stub
               if(ifEnd==true){
            System.out.println("  </user>");
            ifEnd=false;
            }
			//當一個標簽解析完后,preTag設置為null;
			preTag = null;
			
			
		}

		@Override
		public void startDocument() throws SAXException {
			// TODO Auto-generated method stub
			System.out.println("開始解析XML文件");
			System.out.println("------------------------------");
			System.out.println("<?xml version="+"\""+1.0+"\""+ "encoding="+"\""+"UTF-8"+"\""+"?"+">");
			System.out.println(" <oracle>");
			

		}

		@Override
		public void startElement(String uri, String localName, String qName,
				Attributes attributes) throws SAXException {
			// TODO Auto-generated method stub
           // <user id="1" >
			if ("user".equals(qName)) {
				String s = qName;
				String s1 = attributes.getValue(0);// Id
				String s2 = attributes.getLocalName(0);
				//System.out.println(s + s1 + s2);
				System.out.println("  <"+qName+" "+"id="+"\""+s1+"\""+">");
				

			}
			preTag = qName;

		}

	}
}

三、運行結果:

如何對XML進行Sax解析

四、補充說明:

1.執行順序:

由于Sax解析是按照xml文件的順序來解析,當讀入<?xml.....>時,會調用startDocument()方法,當讀入<oracle>的時候,由于它是個ElementNode,所以會調用startElement(String uri, String localName, String qName, Attributes attributes),當要得到oracle孩子的信息是,就會調用characters(char[] ch, int start, int length)方法。

2.內部類加static關鍵字:

內部類是動態的,也就是開頭以public class開頭。而主程序是public static class main。在Java中,類中的靜態方法不能直接調用動態方法。只有將某個內部類修飾為靜態類,然后才能夠在靜態類中調用該類的成員變量與成員方法。所以在不做其他變動的情況下,最簡單的解決辦法是將public class改為public static class.

3.startElement(String uri, String localName, String qName,Attributes attributes) 方法的參數解釋:

感謝各位的閱讀!關于“如何對XML進行Sax解析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌图县| 团风县| 蕲春县| 白玉县| 社会| 南溪县| 伊宁县| 康马县| 周宁县| 黑山县| 炎陵县| 文水县| 毕节市| 泽普县| 都安| 虞城县| 华阴市| 股票| 天祝| 保靖县| 富源县| 察隅县| 乡城县| 湘潭市| 化隆| 兰西县| 东阳市| 吴江市| 沙雅县| 盐源县| 嘉峪关市| 沅江市| 来宾市| 丘北县| 昭平县| 南平市| 涟水县| 布拖县| 阿拉善右旗| 大竹县| 苏尼特右旗|