xml簡介和dom4j解析xml重要方法


1.xml(可擴展標記語言)的概述
    與html的區別:
        xml: 描述數據,用於存儲和傳輸數據。標簽都是自定義的
        html:顯示數據,標簽都是預定義的
        
    注意事項:
    文檔聲明必須在第一行
    只有一個根標簽
    元素只能包裹嵌套,不能交叉嵌套
    注釋不能嵌套
    標簽命名規則:字母、數字、下划線、減號、英文句點組成,嚴格區分大小寫
    屬性值要用單引號或雙引號

2.約束文檔
    1.DTD(Document tyte definition)--->約束xml的書寫規范
        a DTD文件的書寫
            <?xml version="1.0" encoding="UTF-8"?>   //文檔聲明
            <!ELEMENT 書架 (書+)>
            <!ELEMENT 書(書名,作者,售價)>
            <!ELEMENT 書名(#PCDATA)>
            <!ELEMENT 作者(#PCDATA)>
            <!ELEMENT 售價(#PCDATA)>
        b DTD文件的引入
            <?xml version="1.0" encoding="UTF-8"?>         
            <!DOCTYPE 書架 SYSTEM "book.dtd">    //可以在xml文件創建時自動生成
            <書架>
                <書>
                    <書名></書名>
                    <作者></作者>
                    <售價></售價>
                </書>
            </書架>
        
    2.Schema的概述:--->符合xml語法,拓展名.xsd
        對比 Schema 和 DTD
        a.XML Schema符合XML語法結構。 
        b.DOM、SAX等XML API很容易解析出XML Schema文檔中的內容。 
        c.XML Schema對名稱空間支持得非常好。 
        d.XML Schema比XML DTD支持更多的數據類型,並支持用戶自定義新的數據類型。 
        e.XML Schema定義約束的能力非常強大,可以對XML實例文檔作出細致的語義限制。
        約束文檔:    <?xml version="1.0" encoding="UTF-8"?>                                                             
                    <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'   //標准名稱空間  xmlns意思為xml名稱空間
                        targetNamespace='http://www.itheima.com'>            //自定義名稱空間
                        <xs:element name='書架'>                             //約束根標簽
                            <xs:complexType>                                //表示根標簽為復雜類型,可以有子標簽
                                <xs:sequence maxOccurs='unbounded'>            //表示子元素有順序  屬性為unbounded表示子標簽的數量不限
                                    <xs:element name='書'>                    
                                        <xs:complexType>
                                            <xs:sequence>
                                                <xs:element name='書名' type='xs:string' />
                                                <xs:element name='作者' type='xs:string' />
                                                <xs:element name='售價' type='xs:string' />
                                            </xs:sequence>
                                        </xs:complexType>
                                    </xs:element>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:schema>

        引入約束文檔:
                    <?xml version="1.0" encoding="UTF-8"?>                  
                        <itheima:書架 xmlns:itheima="http://www.itheima.com"
                        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:schemaLocation="http://www.itheima.com book.xsd">

                        <書>
                            <書名>書名</書名>
                            <作者>作者</作者>
                            <售價>售價</售價>
                        </書>

                    </itheima:書架>
                    
3.XML的解析
        解析的含義: 采用Java代碼操作(增,刪,改,查)我們的XML文件里面的內容.
        常見的解析方式:
            DOM:把所有的節點數據,全部加載到內存當中.解析方便,容易出現內存溢出
            SAX:逐個節點進行解析,不會出現內存溢出,解析較為繁瑣.
        提供的解析操作:
            JAXP:sun公司提供
            DOM4j:開源框架,需要導入jar包
            
4.Dom4j常用的方法:
    a需要導入jar包
    
    b創建對應的document對象----> dom4j-1.6.1---docs---index.html---quick start---Creating a new XML document
        SAXReader reader = new SAXReader();  //獲取解析器對象
        Document document = reader.read(url);  //通過解析器獲取文件對象,參數url為xml的文件路徑的字符串
        重要方法:Element getRootElement() //通過文件對象,獲取根標簽對象
    Element
        創建元素對象的方式:
            DocumentHelper.CreatElement(String name);  //創建一個新的元素對象,參數為要創建的對象的名稱
        常用方法
            獲取方法:
                獲取文本/屬性:
                    String  attributeValue(String name):     //根據指定的屬性名稱獲取其對應的值
                    String  getText() :                      //獲取當前元素對象的文本
                    String  elementText(String name)           //獲取名稱為name的子元素中的文本
                獲取子元素對象:
                    Element element(String name):            //獲取元素名稱為name的子元素對象,如果有重復,返回第一個
                    List elements() :                        //獲取所有的子元素
                    List elements(String name):            //獲取元素名稱為name的所有子元素集合
                獲取父元素對象
                    Element getParent();
                    
            添加元素
                add(Element e)       //添加子元素
                
            修改文本、屬性:   
                void setText(String text):              //設置當前元素對象的文本
                Element addAttribute(String name,String value): //根據指定的屬性名稱和值進行添加或者修改 參數為屬性名和屬性值
                
            刪除方法:
                remove(Element e);    //刪除子元素,參數為元素對象
                
        將文件寫入XML文件中
            //獲取格式化對象
            OutputFormat format=OutputFormat.createCompactFormat();
            //獲取字節流
            FileOutputStream fos=new FileOutputStream(path);
            //獲取寫xml對象
            XMLWriter xw=new XMLWriter(fos,format);
            //寫文件
            xw.write(d);   //參數為文件對象
                
                
                
                
                
                
                

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM