1. 程式人生 > 實用技巧 >Schema約束, dom4j解析

Schema約束, dom4j解析

  Schema是新的XML文件約束:Schema要比DTD強大很多,是DTD替代者;Schema本身也是XML文件,但Schema文件的副檔名為xsd,而不是xml .Schema功能更強大,資料型別更完善;Schema支援名稱空間

  與DTD一樣,要求可以通過schema約束文件編寫xml文件。常見框架使用schema的有:Spring等通過提供”web-app_ 2_ 5.xsd"編寫xml文件

  web-app_ 2_ 5.xsd

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
    模擬servlet2.5規範,如果開發人員需要在xml使用當前Schema約束,必須包括指定名稱空間。
    格式如下:
    <web-app xmlns="http://www.example.org/web-app_2_5" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
            version="2.5">
--> <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/web-app_2_5" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.example.org/web-app_2_5" elementFormDefault="qualified"> <xsd:element name="web-app"> <xsd:complexType
> <xsd:choice minOccurs="0" maxOccurs="unbounded"> <xsd:element name="servlet"> <xsd:complexType> <xsd:sequence> <xsd:element name="servlet-name"></xsd:element> <
xsd:element name="servlet-class"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="servlet-mapping"> <xsd:complexType> <xsd:sequence> <xsd:element name="servlet-name"></xsd:element> <xsd:element name="url-pattern" maxOccurs="unbounded"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="welcome-file-list"> <xsd:complexType> <xsd:sequence> <xsd:element name="welcome-file" maxOccurs="unbounded"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:choice> <xsd:attribute name="version" type="double" use="optional"></xsd:attribute> </xsd:complexType> </xsd:element> </xsd:schema>

XML解析概述

  當將資料儲存在XML後,我們就希望通過程式獲得XML的內容。如果我們使用Java基礎所學習的舊知識是可以完成的,不過你需要非常繁瑣的操作才可以完成,且開發中會遇到不同問題(只讀、讀寫)。人們為不同問題提供不同的解析方式,並提交對應的解析器,方便開發人員操作XML。

解析方式和解析器

  開發中比較常見的解析方式有三種,如下:

  1. DOM:要求解析器把整個XML文件裝載到記憶體,並解析成一個Document物件。

    a)優點:元素與元素之間保留結構關係,故可以進行增刪改查操作。

    b)缺點:XML文件過大,可能出現記憶體溢位顯現。

  2.SAX:是一種速度更快,更有效的方法。它逐行掃描文件,一邊掃描一邊解析。並以事件 驅動的方式進行具體解析,每執行一行,都將觸發對應的事件。

    a) 優點:處理速度快,可以處理大檔案

    b) 缺點:只能讀,逐行後將釋放資源。

  3. PULL: Android內建的XML解析方式,類似SAX。

  解析器:就是根據不同的解析方式提供的具體實現。有的解析器操作過於繁瑣,為了方便開發人員,有提供易於操作的解析開發包。

  常見的解析開發包:

    JAXP: sun公司提供支援DOMSAX開發包

    JDom:dom4j兄弟

    jsoup:一種處理HTML特定解析開發包

    dom4j:比較常用的解析開發包,hibernate底層採用。

DOM解析原理及結構模型

  XML DOM和HTML DOM類似,XML DOM將整個XML文件載入到記憶體,生成一個DOM樹,並獲得一個Document物件,通過Document物件就可以對DOM進行操作

  DOM中的核心概念就是節點,在XML文件中的元素、屬性、文字等,在DOM中都是節點!

API使用

  dom4j必須使用核心類SaxReader載入xml文件獲得Document通過Document物件獲得文件的根元素,然後就可以操作了。