Dom4j學習筆記

一、Loading XML Data

     以下代碼從File中或一個URL中讀取一個XML文件,併產生一個Document對象。一個Document對象表示了內存中的一棵XML樹,可以在這個XML樹中進行遍歷、查詢、修改等操作。

 



二、QName and Namespace

     QName對象表示了一個XML元素或屬性的qualified name,即一個namespace和一個local name的二元組。

Namespace對象表示了QName二元組中的namespace部分,它由prefix和URI兩部分組成。

 


可以調用Namespace(String prefix, String uri)構造方法構造一個新的Namespace對象;也可以調用Namespace.get(String prefix, String uri)靜態方法獲得一個新的Namespace對象。

可以調用QName(String name)構造方法構造一個沒有namespace的qualified name;或者調用QName(String name, Namespace namespace)構造方法構造一個有namespace的qualified name。

三、Navigating Through an XML Tree

        對Document對象調用getRootElement()方法可以返回代表根節點的Element對象。擁有了一個Element對象後,可以對該對象調用elementIterator()方法獲得它的子節點的Element對象們的一個iterator。使用(Element)iterator.next()方法遍歷一個iterator並把每個取出的元素轉化爲Element類型。

通過遞歸的方法,以下代碼可以根據Document對象打印出完整的XML樹。

 


四、Getting Information from an Element

可以通過Element類提供的方法訪問一個XML元素中含有的信息:

Method Comment
getQName() 元素的QName對象
getNamespace() 元素所屬的Namespace對象
getNamespacePrefix() 元素所屬的Namespace對象的prefix
getNamespaceURI() 元素所屬的Namespace對象的URI
getName() 元素的local name
getQualifiedName() 元素的qualified name
getText() 元素所含有的text內容,如果內容爲空則返回一個空字符串而不是null
getTextTrim() 元素所含有的text內容,其中連續的空格被轉化爲單個空格,該方法不會返回null
attributeIterator() 元素屬性的iterator,其中每個元素都是Attribute對象
attributeValue() 元素的某個指定屬性所含的值
elementIterator() 元素的子元素的iterator,其中每個元素都是Element對象
element() 元素的某個指定(qualified name或者local name)的子元素
elementText() 元素的某個指定(qualified name或者local name)的子元素中的text信息
getParent 元素的父元素
getPath() 元素的XPath表達式,其中父元素的qualified name和子元素的qualified name之間使用"/"分隔
isTextOnly() 是否該元素只含有text或是空元素
isRootElement() 是否該元素是XML樹的根節點

要取出Element對象中某個屬性的信息,可以調用attributeIterator()方法獲得一個Attribute對象的iterator,然後再遍歷它。也可以直接調用attributeValue()方法獲得指定屬性的值。該方法接受四種類型的參數:

  • attributeValue(QName qname):通過指定qualified name獲得屬性值,如果無法找到指定的屬性,則返回null
  • attributeValue(QName qname, String defaultValue):通過指定qualified name獲得屬性值,如果無法找到指定的屬性,則返回defaultValue
  • attributeValue(String name):通過指定local name獲得屬性值,而忽略屬性的namespace,如果無法找到指定的屬性,則返回null
  • attributeValue(String name, String defaultValue):通過指定local name獲得屬性值,而忽略屬性的namespace,如果無法找到指定的屬性,則返回defaultValue

對於一個Attribute對象,可以使用它的以下方法訪問其中的信息:

Method Comment
getQName() 屬性的QName對象
getNamespace() 屬性所屬的Namespace對象
getNamespacePrefix() 屬性所屬的Namespace對象的prefix
getNamespaceURI() 屬性所屬的Namespace對象的URI
getName() 屬性的local name
getQualifiedName() 屬性的qualified name
getValue() 屬性的值

五、Writing an XML Tree to OutputStream

Dom4j通過XMLWriter將由Document對象表示的XML樹寫入一個文件,並使用OutputFormat格式對象指定寫入的風格和編碼方法。調用OutputFormat.createPrettyPrint()方法可以獲得一個默認的pretty print風格的格式對象。對OutputFormat對象調用setEncoding()方法可以指定XML文件的編碼方法。

 


六、Creating an XML Tree

使用DocumentFactory對象創建一個空的Document對象。DocumentFactory對象由DocumentFactory.getInstance()靜態方法產生。對Document對象調用addElement()方法將創建XML根節點,並將該節點返回。也可以手工創建一個Element對象並調用Document.setRootElement()方法把它設置爲根節點

 


七、Adding Information into an Element

      Element通過addElement()爲自己增加一個子節點到當前所有子節點的後面。該方法可以接受三種不同類型的參數:(QName qname)(String name)或者(String qualifiedName, String namespaceURI)。該方法返回增加的子節點的Element對象。

Element通過addAttribute()爲自己增加屬性。該方法可以接受兩種不同類型的參數:(QName qname, String value)或者(String name, String value)。該方法返回自身的Element對象。

Element通過addText()爲自己增加文本內容。該方法只接受String類型參數,並返回自身的Element對象。

 


八、Deleting Elements and Attributes

     要刪除XML樹上的一棵子樹,首先要找到該子樹的根節點,然後對該節點調用detach()方法。注意:如果對根節點調用了detach()方法,將導致該XML樹不再完整(一個XML文件需要有且僅有一個根節點)。

 


要清除Element下的所有子節點(包括Element和text),可以對該Element調用clearContent()方法。該方法不會清除Element的屬性。

要清除Element下的某個Attribute,首先要獲得該Attribute對象,然後把它作爲參數調用Elementremove()方法。

九、Updating an Attribute

要更新一個屬性的內容,首先要獲得該Attribute對象,然後可以調用setNamespace()方法更新它所屬的namespace;調用setValue()方法更新它的屬性值。

十、Updating an Element's Text

可以對一個Element對象調用isTextOnly()方法判斷它是否只含有text或者是空節點。對Element對象調用addText()方法將把一個字符串附加到Element中,但不會修改它原來擁有的text或者子節點。如果ElementisTextOnly(),要修改原來含有的text,可以先調用clearContent(),再調用addText()並把新值傳入。

 


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章