XML

xml

xml概敘

EXtensible Markup Language 可擴展的標記語言,標記語言:通過一組標籤表示語言,可擴展標記語言:HTML中的標籤都是預定義好.XML允許用戶自定義標籤.

xml的作用

XML出現替換HTML. -XHTML.
XML用來存儲數據(傳遞數據),作爲軟件的配置文件.
XML可以在任何平臺下進行解析的.傳遞數據.(異步系統之間的傳輸數據).
XML可以作爲軟件的配置文件.

xml的使用

文檔聲明:
    在XML的文檔的第一行第一列編寫文檔聲明.
    語法:<?xml  ?>
        屬性:
            version:版本號.必須的.
            encoding:字符集.UTF-8,GBK,GB2312,ISO-8859-1 
            standalone:依賴外部的文件.yes-代表這個文檔. no-代表這個文檔依賴外部的文檔.
元素:標籤.(可以自定義標籤)
    語法:
        標籤區分大小寫的.<a> <A>
        XML語法比較嚴格,有開始標籤,必須有結束標籤.<book/>
        XML的元素名稱.需要以字母開始中間不能使用空格 不能使用:
        元素的名稱不能是以XML,xml,Xml開頭.
        XML文檔必須有一個跟元素.
屬性:
    語法:
        不能使用空格,冒號特殊字符.
        屬性需要以字母開頭.
        屬性必須使用引號.  
註釋:
    <!-- 註釋 -->
特殊字符和CDATA區:
    < &lt;
    > &gt;
    & &amp;
    “ &quot;
    ‘ &apos;
    CDATA:<![CDATA[  內容  ]]>

xml的解析

XML的解析方式
DOM解析,SAX解析.
針對這兩種方式不同的公司提供了不同的API.
SUN:JAXP.
JDom:Jdom
Dom4J:dom4j
pull解析-主要應用在android.
jsoup解析-主要應用在網絡爬蟲,應用解析HTML的.

dom4j入門

    @Test
    public void demo1() throws DocumentException{
        // 1.創建一個解析器:
        SAXReader reader = new SAXReader();
        // 2.獲得代表整個文檔的Document對象
        Document document = reader.read("src/persons.xml");
        // 3.Dom4J獲得XML的跟元素.
        Element root = document.getRootElement();
        // 4.獲得跟元素以下的其他的元素:
        // root.element("person");
        Element pElement = (Element) root.elements("person").get(1);

        Element nameElement = pElement.element("name");

        String name = nameElement.getText();

        System.out.println(name);
    }

xml解析代碼示例

public class MyServer {
    public static void main(String[] args) throws Exception {
        // 解析XML 獲得端口號
        // 1.創建解析器:
        SAXReader reader = new SAXReader();
        // 2.讀取文件,獲得文檔對象.
        Document document = reader.read("conf/server.xml");
        // 3.獲得跟元素:
        Element root = document.getRootElement();
        // 4.獲得Server元素.
        Element connElement = root.element("Server").element("Connector");

        String port = connElement.attributeValue("port");
        System.out.println(port);

        // ServerSocket 對象可以監聽端口
        ServerSocket serversocket = new ServerSocket(Integer.parseInt(port));
        while(true) {
            Socket socket = serversocket.accept();  // 等待客戶端的連接請求,一旦有請求過來,就結束阻塞,返回客戶端對象
            //System.out.println(socket.getInetAddress());
            // 一旦有客戶來訪問, 就另開一個新線程去提供服務, main線程繼續等待下一個客戶的連接
            new Thread(new MyService(socket)).start();

        }
    }
}

xml約束

xml約束概述

用來規範XML的標籤可以出現哪些標籤,不能出現哪些標籤,標籤之間的順序出現的次數都是由要求的.

引入xml約束

引入方式:一種內部,一種外部

引入內部xml約束

<!DOCTYPE books [
     約束
 ]>
<!DOCTYPE books [
<!ELEMENT books (book+)>
<!ELEMENT book (name,author,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>

<!ATTLIST book bid ID #REQUIRED>
]>

引入外部xml約束

  1. 本地:
  2. 網絡:

DTD語法

* DTD語法:
     * 元素:<!ELEMENT 元素名稱 元素組成>
         * 元素組成:EMPTY ANY (子元素) (#PCDATA)
         * 如果出現子元素:使用?(出現0次或1次),*(出現0次或多次),+(出現1次或多次) 表示子元素出現的個數.使用|或者,規定元素出現的順序.  | :代表或  , :代表子元素出現必須按照順序.
     * 屬性: <!ATTLIST 元素名稱 屬性名稱 屬性類型 屬性使用規則>
         * 屬性類型:ID,枚舉,CDATA
         * 使用規則: REQUIRED , IMPLIED ,FIXED

schema約束1

Schema與DTD區別:
1. DTD語法自成一派.Schema就是一個XML文檔.
2. Schema可以更方便被XML的解析器所解析.
3. Schema做了更加強大的語意和語法約束.提供了更多的數據類型.
4. Schema支持名稱空間.

schema約束示例

定義Schema文檔
<?xml version="1.0" encoding="UTF-8"?>
<!-- 
Schema根標籤 schema 
    根標籤的三個屬性:
        xmlns :xml的namespace.XML的名稱空間.
            約束文檔的名稱空間-http://www.w3.org/2001/XMLSchema
        targetNamespace:目標名稱空間.-將該約束中定義的元素或屬性綁定到一個名稱空間上.
            名稱空間可以使任意的,通常習慣使用URI地址作爲名稱空間.
        elementFormDefault:qualified/unqualified
-->
<schema 
xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.mytest.com" 
elementFormDefault="qualified">
    <!-- 使用element定義元素 -->
    <!-- 複雜元素 -->
    <element name="books">
        <!-- 複雜元素 -->
        <complexType>
            <sequence maxOccurs="unbounded" minOccurs="1">
                <element name="book">
                    <!-- 複雜元素 -->
                    <complexType>
                        <!-- 子元素出現是有順序的 -->
                        <sequence>
                                <!-- 簡單元素 -->
                                <element name="name" type="string"></element>
                                <element name="author" type="string"></element>
                                <element name="price" type="double"></element>
                        </sequence>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>

  1. Schema使用了一套W3C預先定義好的一套標籤進行定義的.而且Schema使用的XML的規範編寫的.支持名稱空間的.Schema的文件的擴展名爲xsd.
    名稱空間類似於Java中包.Java中通過包區分類是否是同一個的.Schema通過名稱空間區分定義的標籤或者屬性是否是同一個.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章