一、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對象,然後把它作爲參數調用Element的remove()方法。
九、Updating an Attribute
要更新一個屬性的內容,首先要獲得該Attribute對象,然後可以調用setNamespace()方法更新它所屬的namespace;調用setValue()方法更新它的屬性值。
十、Updating an Element's Text
可以對一個Element對象調用isTextOnly()方法判斷它是否只含有text或者是空節點。對Element對象調用addText()方法將把一個字符串附加到Element中,但不會修改它原來擁有的text或者子節點。如果Element是isTextOnly(),要修改原來含有的text,可以先調用clearContent(),再調用addText()並把新值傳入。