|
Attribute 定義了 XML 的屬性 |
|
Branch 爲能夠包含子節點的節點如 XML 元素 (Element) 和文檔 (Docuemnts) 定義了一個公共的行爲, |
|
CDATA 定義了XML CDATA 區域 |
|
CharacterData 是一個標識藉口,標識基於字符的節點。如 CDATA , Comment, Text . |
|
Comment 定義了XML註釋的行爲 |
|
定義了 XML文檔 |
|
DocumentType 定義XML DOCTYPE聲明 |
|
Element 定義XML 元素 |
|
ElementHandler 定義了 Element 對象的處理器 |
|
Entity 定義 XML entity |
|
Node 爲所有的 dom4j 中 XML 節點 定義了多態行爲 |
|
NodeFilter 定義了在dom4j節點中產生的一個濾鏡或謂詞的行爲(predicate) |
|
ProcessingInstruction 定義 XML 處理指令. |
|
Text 定義XML 文本節點. |
|
Visitor 用於實現Visitor 模式. |
|
XPath 在分析一個字符串後會提供一個XPath 表達式 |
- interface java.lang.Cloneable
- interface org.dom4j.
- interface org.dom4j.CharacterData
- interface org.dom4j.
// 從文件讀取XML,輸入文件名,返回XML文檔
public Document read(String fileName) throws MalformedURLException, DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(new File(fileName));
return document;
}
|
public Element getRootElement(Document doc){
return doc.getRootElement();
}
|
// 枚舉所有子節點
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
// do something
}
// 枚舉名稱爲foo的節點
for ( Iterator i = root.elementIterator(foo); i.hasNext();) {
Element foo = (Element) i.next();
// do something
}
// 枚舉屬性
for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
Attribute attribute = (Attribute) i.next();
// do something
}
|
public void treeWalk() {
treeWalk(getRootElement());
}
public void treeWalk(Element element) {
for (int i = 0, size = element.nodeCount(); i < size; i++) {
Node node = element.node(i);
if (node instanceof Element) {
treeWalk((Element) node);
} else { // do something....
}
}
}
|
public class MyVisitor extends VisitorSupport {
public void visit(Element element){
System.out.println(element.getName());
}
public void visit(Attribute attr){
System.out.println(attr.getName());
}
} 調用: root.accept(new MyVisitor()) |
public void bar(Document document) {
List list = document.selectNodes( //foo/bar );
Node node = document.selectSingleNode(//foo/bar/author);
String name = node.valueOf( @name );
}
|
public void findLinks(Document document) throws DocumentException {
List list = document.selectNodes( //a/@href );
for (Iterator iter = list.iterator(); iter.hasNext(); ) {
Attribute attribute = (Attribute) iter.next();
String url = attribute.getValue();
}
}
|
// XML轉字符串 Document document = ...;
String text = document.asXML();
// 字符串轉XML
String text = <person> <name>James</name> </person>;
Document document = DocumentHelper.parseText(text);
|
public Document styleDocument(
Document document,
String stylesheet
) throws Exception {
// load the transformer using JAXP
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(
new StreamSource( stylesheet )
);
// now lets style the given document
DocumentSource source = new DocumentSource( document );
DocumentResult result = new DocumentResult();
transformer.transform( source, result );
// return the transformed document
Document transformedDoc = result.getDocument();
return transformedDoc;
}
|
public Document createDocument() {
Document document = DocumentHelper.createDocument();
Element root = document.addElement(root);
Element author1 =
root
.addElement(author)
.addAttribute(name, James)
.addAttribute(location, UK)
.addText(James Strachan);
Element author2 =
root
.addElement(author)
.addAttribute(name, Bob)
.addAttribute(location, US)
.addText(Bob McWhirter);
return document;
}
|
FileWriter out = new FileWriter( foo.xml );
document.write(out);
|
如果你想改變輸出的格式,比如美化輸出或縮減格式,可以用XMLWriter類
public void write(Document document) throws IOException {
// 指定文件
XMLWriter writer = new XMLWriter(
new FileWriter( output.xml )
);
writer.write( document );
writer.close();
// 美化格式
OutputFormat format = OutputFormat.createPrettyPrint();
writer = new XMLWriter( System.out, format );
writer.write( document );
// 縮減格式
format = OutputFormat.createCompactFormat();
writer = new XMLWriter( System.out, format );
writer.write( document );
}
|