国产精品爱久久久久久久小说,女人扒开腿让男人桶到爽 ,亚洲欧美国产双大乳头,国产成人精品综合久久久久,国产精品制服丝袜无码,免费无码精品黄av电影,黑色丝袜无码中中文字幕,乱熟女高潮一区二区在线

            你所不知道的XML

            2020-5-6    前端達人

            一、XML:

            XML(Extensible Markup Language 可擴展標記語言),XML是一個以文本來描述數據的文檔。

            1. 示例:

            <?xml version="1.0" encoding="UTF-8"?>
            <people>
                <person personid="E01">
                    <name>Tony</name>
                    <address>10 Downing Street, London, UK</address>
                    <tel>(061) 98765</tel>
                    <fax>(061) 98765</fax>
                    <email>tony@everywhere.com</email>
                </person>
                <person personid="E02">
                    <name>Bill</name>
                    <address>White House, USA</address>
                    <tel>(001) 6400 98765</tel>
                    <fax>(001) 6400 98765</fax>
                    <email>bill@everywhere.com</email>
                </person>
            </people>
            

            2. 用途:

            (1)充當顯示數據(以XML充當顯示層)

            (2)存儲數據(存儲層)的功能

            (3)以XML描述數據,并在聯系服務器與系統的其余部分之間傳遞。(傳輸數據的一樣格式)

            從某種角度講,XML是數據封裝和消息傳遞技術。

            3.解析XML:
            3.1 :使用SAX解析XML

            3.1.1 什么是SAX:

            SAX是Simple API for XML的縮寫
            SAX 是讀取和操作 XML 數據更快速、更輕量的方法。SAX 允許您在讀取文檔時處理它,從而不必等待整個文檔被存儲之后才采取操作。它不涉及 DOM 所必需的開銷和概念跳躍。 SAX API是一個基于事件的API ,適用于處理數據流,即隨著數據的流動而依次處理數據。SAX API 在其解析您的文檔時發生一定事件的時候會通知您。在您對其響應時,您不作保存的數據將會被拋棄。

            3.1.2 SAX解析XML方式:

            SAX API中主要有四種處理事件的接口,它們分別是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。實際上只要繼承DefaultHandler 類就可以,DefaultHandler實現了這四個事件處理器接口,然后提供了每個抽象方法的默認實現。
            // 創建SAX解析器工廠對象
            SAXParserFactory spf = SAXParserFactory.newInstance();
            // 使用解析器工廠創建解析器實例
            SAXParser saxParser = spf.newSAXParser();
            // 創建SAX解析器要使用的事件偵聽器對象
            PersonHandler handler = 
                                     new PersonHandler();
            // 開始解析文件
            saxParser.parse(
                        new File(fileName), handler);
            


            3.2. DOM解析XML:

            DOM:Document Object Model(文檔對象模型)
            DOM的特性:
            定義一組 Java 接口,基于對象,與語言和平臺無關將 XML 文檔表示為樹,在內存中解析和存儲 XML 文檔,允許隨機訪問文檔的不同部分。

            DOM解析XML
            DOM的優點,由于樹在內存中是持久的,因此可以修改后更新。它還可以在任何時候在樹中上下導航,API使用起來也較簡單。 

            DocumentBuilderFactory builder = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = builder.newDocumentBuilder();
            db.parse("person.xml");
            NodeList node_person = doc.getElementsByTagName("person");
            

             3.3. JDOM解析XML:

            JDOM是兩位著名的 Java 開發人員兼作者,Brett Mclaughlin 和 Jason Hunter 的創作成果, 2000 年初在類似于Apache協議的許可下,JDOM作為一個開放源代碼項目正式開始研發了。

            JDOM 簡化了與 XML 的交互并且比使用 DOM 實現更快,JDOM 與 DOM 主要有兩方面不同。首先,JDOM 僅使用具體類而不使用接口。這在某些方面簡化了 API,但是也限制了靈活性。第二,API 大量使用了 Collections 類,簡化了那些已經熟悉這些類的 Java 開發者的使用。
             

            解析步驟:
            (1)SAXBuilder sax = new SAXBuilder();
            (2)Document doc = sax.build(….);
            (3)Element el = doc.getRootElement();(4)List list = el.getChildren();
            (5)遍歷內容
            


            3.4. DOM4J解析XML:

            dom4j是一個非常非常優秀的Java XML API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一個開放源代碼的軟件,可以在SourceForge上找到它。在對主流的Java XML API進行的性能、功能和易用性的評測,dom4j無論在那個方面都是非常出色的。如今你可以看到越來越多的Java軟件都在使用dom4j來讀寫XML,特別值得一提的是連Sun的JAXM也在用dom4j。這是必須使用的jar包, Hibernate用它來讀寫配置文件。
            解析步驟:
            (1)SAXReader sax = new SAXReader();
            (2)Document doc = sax.read(Thread.currentThread().getContextClassLoader()
                      .getResourceAsStream("person.xml"));
            (3)Element root = doc.getRootElement();
            (4)Iterator iterator = root.elementIterator();
            (5)遍歷迭代器
            


            4.各種解析方法比較:
            JDOM 和 DOM 在性能測試時表現不佳,在測試 10M 文檔時內存溢出。
            SAX表現較好,這要依賴于它特定的解析方式。一個 SAX 檢測即將到來的XML流,但并沒有載入到內存(當然當XML流被讀入時,會有部分文檔暫時隱藏在內存中。DOM4J是這場測試的獲勝者,目前許多開源項目中大量采用 DOM4J,例如大名鼎鼎的 Hibernate 也用 DOM4J 來讀取 XML 配置文件。
            xstream 實現XML的轉換


            5.案例:

            public class Person {
                private String personid;
                private String name;
                private String address;
                private String tel;
                private String fax;
                private String email;
            
                @Override
                public String toString() {
                    return "Person{" +
                            "personid='" + personid + '\'' +
                            ", name='" + name + '\'' +
                            ", address='" + address + '\'' +
                            ", tel='" + tel + '\'' +
                            ", fax='" + fax + '\'' +
                            ", email='" + email + '\'' +
                            '}';
                }
            
                public String getPersonid() {
                    return personid;
                }
            
                public void setPersonid(String personid) {
                    this.personid = personid;
                }
            
                public String getName() {
                    return name;
                }
            
                public void setName(String name) {
                    this.name = name;
                }
            
                public String getAddress() {
                    return address;
                }
            
                public void setAddress(String address) {
                    this.address = address;
                }
            
                public String getTel() {
                    return tel;
                }
            
                public void setTel(String tel) {
                    this.tel = tel;
                }
            
                public String getFax() {
                    return fax;
                }
            
                public void setFax(String fax) {
                    this.fax = fax;
                }
            
                public String getEmail() {
                    return email;
                }
            
                public void setEmail(String email) {
                    this.email = email;
                }
            }
            



            <?xml version="1.0" encoding="UTF-8"?>
            <people>
                <person personid="E01">
                    <name>Tony Blair</name>
                    <address>10 Downing Street, London, UK</address>
                    <tel>(061) 98765</tel>
                    <fax>(061) 98765</fax>
                    <email>blair@everywhere.com</email>
                </person>
                <person personid="E02">
                    <name>Bill Clinton</name>
                    <address>White House, USA</address>
                    <tel>(001) 6400 98765</tel>
                    <fax>(001) 6400 98765</fax>
                    <email>bill@everywhere.com</email>
                </person>
            </people>
            


            import org.xml.sax.Attributes;
            import org.xml.sax.SAXException;
            import org.xml.sax.helpers.DefaultHandler;
            
            import java.util.ArrayList;
            import java.util.List;
            
            /**
             * Created by Hu Guanzhong
             * SAX解析的特點:
             * 1、基于事件驅動
             * 2、順序讀取,速度快
             * 3、不能任意讀取節點(靈活性差)
             * 4、解析時占用的內存小
             * 5、SAX更適用于在性能要求更高的設備上使用(Android開發中)
             *
             */
            public class PersonHandler extends DefaultHandler{
                private List<Person> persons = null;
                private Person p;//當前正在解析的person
                private String tag;//用于記錄當前正在解析的標簽名
            
                public List<Person> getPersons() {
                    return persons;
                }
            
                //開始解析文檔時調用
                @Override
                public void startDocument() throws SAXException {
                    super.startDocument();
                    persons = new ArrayList<>();
                    System.out.println("開始解析文檔...");
                }
            
                //在XML文檔解析結束時調用
                @Override
                public void endDocument() throws SAXException {
                    super.endDocument();
                    System.out.println("解析文檔結束.");
                }
            
                /**
                 * 解析開始元素時調用
                 * @param uri 命名空間
                 * @param localName 不帶前綴的標簽名
                 * @param qName 帶前綴的標簽名
                 * @param attributes 當前標簽的屬性集合
                 * @throws SAXException
                 */
                @Override
                public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
                    super.startElement(uri, localName, qName, attributes);
                    if ("person".equals(qName)){
                        p = new Person();
                        String personid = attributes.getValue("personid");
                        p.setPersonid(personid);
                    }
                    tag = qName;
                    System.out.println("startElement--"+qName);
                }
            
                //解析結束元素時調用
                @Override
                public void endElement(String uri, String localName, String qName) throws SAXException {
                    super.endElement(uri, localName, qName);
                    if ("person".equals(qName)) {
                        persons.add(p);
                    }
                    tag = null;
                    System.out.println("endElement--"+qName);
                }
            
                //解析文本內容時調用
                @Override
                public void characters(char[] ch, int start, int length) throws SAXException {
                    super.characters(ch, start, length);
                    if (tag != null) {
                        if ("name".equals(tag)) {
                            p.setName(new String(ch,start,length));
                        }else if("address".equals(tag)){
                            p.setAddress(new String(ch,start,length));
                        }else if("tel".equals(tag)){
                            p.setTel(new String(ch,start,length));
                        }else if("fax".equals(tag)){
                            p.setFax(new String(ch,start,length));
                        }else if("email".equals(tag)){
                            p.setEmail(new String(ch,start,length));
                        }
                        System.out.println(ch);
                    }
                }
            }
            



            public class XMLDemo {
            
                /**
                 * 使用第三方xstream組件實現XML的解析與生成
                 */
                @Test
                public void xStream(){
                    Person p = new Person();
                    p.setPersonid("1212");
                    p.setAddress("北京");
                    p.setEmail("vince@163.com");
                    p.setFax("6768789798");
                    p.setTel("13838389438");
                    p.setName("38");
            
                    XStream xStream = new XStream(new Xpp3Driver());
                    xStream.alias("person",Person.class);
                    xStream.useAttributeFor(Person.class,"personid");
                    String xml = xStream.toXML(p);
                    System.out.println(xml);
            
                    //解析XML
                    Person person = (Person)xStream.fromXML(xml);
                    System.out.println(person);
                }
            
                /**
                 * 從XML文件中讀取對象
                 */
                @Test
                public void xmlDecoder() throws FileNotFoundException {
                    BufferedInputStream in = new BufferedInputStream(new FileInputStream("test.xml"));
                    XMLDecoder decoder = new XMLDecoder(in);
                    Person p = (Person)decoder.readObject();
                    System.out.println(p);
                }
                /**
                 * 把對象轉成XML文件寫入
                 */
                @Test
                public void xmlEncoder() throws FileNotFoundException {
                    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("test.xml"));
                    XMLEncoder xmlEncoder = new XMLEncoder(bos);
                    Person p = new Person();
                    p.setPersonid("1212");
                    p.setAddress("北京");
                    p.setEmail("vince@163.com");
                    p.setFax("6768789798");
                    p.setTel("13838389438");
                    p.setName("38");
                    xmlEncoder.writeObject(p);
                    xmlEncoder.close();
                }
            
                /**
                 * DOM4J解析XML
                 * 基于樹型結構,第三方組件
                 * 解析速度快,效率更高,使用的JAVA中的迭代器實現數據讀取,在WEB框架中使用較多(Hibernate)
                 *
                 */
                @Test
                public void dom4jParseXML() throws DocumentException {
                    //1 創建DOM4J的解析器對象
                    SAXReader reader = new SAXReader();
                    InputStream is = Thread.currentThread().getContextClassLoader()
                            .getResourceAsStream("com/vince/xml/person.xml");
                    org.dom4j.Document doc = reader.read(is);
                    org.dom4j.Element rootElement = doc.getRootElement();
                    Iterator<org.dom4j.Element> iterator = rootElement.elementIterator();
                    ArrayList<Person> persons = new ArrayList<>();
                    Person p = null;
                    while(iterator.hasNext()){
                        p = new Person();
                        org.dom4j.Element e = iterator.next();
                        p.setPersonid(e.attributeValue("personid"));
                        Iterator<org.dom4j.Element> iterator1 = e.elementIterator();
                        while(iterator1.hasNext()){
                            org.dom4j.Element next = iterator1.next();
                            String tag = next.getName();
                            if("name".equals(tag)){
                                p.setName(next.getText());
                            }else if("address".equals(tag)){
                                p.setAddress(next.getText());
                            }else if("tel".equals(tag)){
                                p.setTel(next.getText());
                            }else if("fax".equals(tag)){
                                p.setFax(next.getText());
                            }else if("email".equals(tag)){
                                p.setEmail(next.getText());
                            }
                        }
                        persons.add(p);
                    }
                    System.out.println("結果:");
                    System.out.println(Arrays.toString(persons.toArray()));
                }
            
                /**
                 * JDOM解析 XML
                 * 1、與DOM類似基于樹型結構,
                 * 2、與DOM的區別:
                 * (1)第三方開源的組件
                 * (2)實現使用JAVA的Collection接口
                 * (3)效率比DOM更快
                 */
                @Test
                public void jdomParseXML() throws JDOMException, IOException {
                    //創建JDOM解析器
                    SAXBuilder builder = new SAXBuilder();
                    InputStream is = Thread.currentThread().getContextClassLoader()
                            .getResourceAsStream("com/vince/xml/person.xml");
                    org.jdom2.Document build = builder.build(is);
                    Element rootElement = build.getRootElement();
                    List<Person> list = new ArrayList<>();
                    Person person = null;
                    List<Element> children = rootElement.getChildren();
                    for(Element element: children){
                        person = new Person();
                        String personid = element.getAttributeValue("personid");
                        person.setPersonid(personid);
                        List<Element> children1 = element.getChildren();
                        for (Element e: children1){
                            String tag = e.getName();
                            if("name".equals(tag)){
                                person.setName(e.getText());
                            }else if("address".equals(tag)){
                                person.setAddress(e.getText());
                            }else if("tel".equals(tag)){
                                person.setTel(e.getText());
                            }else if("fax".equals(tag)){
                                person.setFax(e.getText());
                            }else if("email".equals(tag)){
                                person.setEmail(e.getText());
                            }
                        }
                        list.add(person);
                    }
                    System.out.println("結果:");
                    System.out.println(Arrays.toString(list.toArray()));
                }
            
                /**
                 * DOM解析XML
                 * 1、基于樹型結構,通過解析器一次性把文檔加載到內存中,所以會比較占用內存,可以隨機訪問
                 * 更加靈活,更適合在WEB開發中使用
                 */
                @Test
                public void domParseXML() throws ParserConfigurationException, IOException, SAXException {
                    //1、創建一個DOM解析器工廠對象
                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                    //2、通過工廠對象創建解析器對象
                    DocumentBuilder documentBuilder = factory.newDocumentBuilder();
                    //3、解析文檔
                    InputStream is = Thread.currentThread().getContextClassLoader()
                            .getResourceAsStream("com/vince/xml/person.xml");
                    //此代碼完成后,整個XML文檔已經被加載到內存中,以樹狀形式存儲
                    Document doc = documentBuilder.parse(is);
                    //4、從內存中讀取數據
            
                    //獲取節點名稱為person的所有節點,返回節點集合
                    NodeList personNodeList = doc.getElementsByTagName("person");
                    ArrayList<Person> persons = new ArrayList<>();
                    Person p = null;
                    //此循環會迭代兩次
                    for (int i=0;i<personNodeList.getLength();i++){
                        Node personNode = personNodeList.item(i);
                        p = new Person();
                        //獲取節點的屬性值
                        String personid = personNode.getAttributes().getNamedItem("personid").getNodeValue();
                        p.setPersonid(personid);
                        //獲取當前節點的所有子節點
                        NodeList childNodes = personNode.getChildNodes();
                        for (int j = 0;j<childNodes.getLength();j++){
                            Node item = childNodes.item(j);
                            String nodeName = item.getNodeName();
                            if ("name".equals(nodeName)) {
                                p.setName(item.getFirstChild().getNodeValue());
                            }else if("address".equals(nodeName)){
                                p.setAddress(item.getFirstChild().getNodeValue());
                            }else if("tel".equals(nodeName)){
                                p.setTel(item.getFirstChild().getNodeValue());
                            }else if("fax".equals(nodeName)){
                                p.setFax(item.getFirstChild().getNodeValue());
                            }else if("email".equals(nodeName)){
                                p.setEmail(item.getFirstChild().getNodeValue());
                            }
                        }
                        persons.add(p);
                    }
                    System.out.println("結果:");
                    System.out.println(Arrays.toString(persons.toArray()));
                }
            
                /**
                 * SAX解析的特點:
                 * 1、基于事件驅動
                 * 2、順序讀取,速度快
                 * 3、不能任意讀取節點(靈活性差)
                 * 4、解析時占用的內存小
                 * 5、SAX更適用于在性能要求更高的設備上使用(Android開發中)
                 * @throws ParserConfigurationException
                 * @throws SAXException
                 * @throws IOException
                 */
                @Test
                public void saxParseXML() throws ParserConfigurationException, SAXException, IOException {
                    //1、創建一個SAX解析器工廠對象
                    SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
                    //2、通過工廠對象創建SAX解析器
                    SAXParser saxParser = saxParserFactory.newSAXParser();
                    //3、創建一個數據處理器(需要我們自己來編寫)
                    PersonHandler personHandler = new PersonHandler();
                    //4、開始解析
                    InputStream is = Thread.currentThread().getContextClassLoader()
                            .getResourceAsStream("com/vince/xml/person.xml");
                    saxParser.parse(is,personHandler);
                    List<Person> persons = personHandler.getPersons();
                    for (Person p:persons){
                        System.out.println(p);
                    }
                }
            }
            

            日歷

            鏈接

            個人資料

            藍藍設計的小編 http://www.dzxscac.cn

            存檔

            主站蜘蛛池模板: 在线永久免费观看黄网站| 亚洲狠狠婷婷综合久久久久图片| 久久精品国产久精国产思思| 狠狠操婷婷| 成年无码av片| 中文字幕码精品视频网站| 亚洲国产精品综合| 高中生自慰www网站| 2021国产精品成人免费视频| 中文字幕天堂在线| 天天综合网网欲色| 无码中文字幕日韩专区视频| 亚洲在线一区二区三区| 精品无码三级在线观看视频 | 久久99成人免费| 欧美金妇欧美乱妇xxxx| 一本久道久久综合无码中文| 51久久国产露脸精品国产| 久久精品人人做人人爽电影| 中文字幕不卡视频| 尤物在线免费视频| 婷婷色怡春院| 成年人视频网站| 国产富婆一级全黄大片| 精品国产免费第一区二区三区| 韩国午夜理伦三级在线观看仙踪林 | 动漫成人无码免费视频在线播| 97超碰网| 日本阿v片在线播放免费| 国产午夜伦伦午夜伦无码| 国产区精品| 94久久国产乱子伦精品免费 | 娇小萝被两个黑人用半米长| 午夜亚洲国产理论片_日本| 在线观看亚洲天堂| 亚洲综合无码明星蕉在线视频| 日韩免费一区二区三区高清| 中文字幕第三页| 日韩偷拍一区| 永久免费无码网站在线观看| 九色综合九色综合色鬼|