依赖jar包
但是dom4j在工作过程中可能需要自己的lib里面的jar包 如果报ClassNotFoundException 只需导入jar包即可
例
官方的说明
1解析xml
import java.net.URL; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.SAXReader; public class Foo { public Document parse(URL url) throws DocumentException { SAXReader reader = new SAXReader(); Document document = reader.read(url); return document; } }
2遍历xml
public void bar(Document document) throws DocumentException { Element root = document.getRootElement(); // iterate through child elements of root for ( Iterator i = root.elementIterator(); i.hasNext(); ) { Element element = (Element) i.next(); // do something } // iterate through child elements of root with element name "foo" for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) { Element foo = (Element) i.next(); // do something } // iterate through attributes of root for ( Iterator i = root.attributeIterator(); i.hasNext(); ) { Attribute attribute = (Attribute) i.next(); // do something } }
3递归调用
public void treeWalk(Document document) { treeWalk( document.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.... } } }
4创建一个xml文档
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class Foo {
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;
}
}
5写回文件
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class Foo {
public void write(Document document) throws IOException {
// lets write to a file
XMLWriter writer = new XMLWriter(
new FileWriter( "output.xml" )
);
writer.write( document );
writer.close();
// Pretty print the document to System.out
OutputFormat format = OutputFormat.createPrettyPrint();
writer = new XMLWriter( System.out, format );
writer.write( document );
// Compact format to System.out
format = OutputFormat.createCompactFormat();
writer = new XMLWriter( System.out, format );
writer.write( document );
}
}
6字符串和xml转换
If you have a reference to a Document or any other Node such as an Attribute or Element, you can turn it into the default XML text via the asXML() method.
Document document = ...; String text = document.asXML();
If you have some XML as a String you can parse it back into a Document again using the helper method DocumentHelper.parseText()
String text = "<person> <name>James</name> </person>"; Document document = DocumentHelper.parseText(text);
7按照xslt输入(没人用)
import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import org.dom4j.Document; import org.dom4j.io.DocumentResult; import org.dom4j.io.DocumentSource; public class Foo { 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; } }
举例说明
book.xml
<?xml version="1.0" encoding="gb2312"?>
<书架>
<书>
<书名 name="dddd">java web就业</书名>
<作者>张孝祥</作者>
<售价>40</售价>
</书>
<书>
<书名 name="xxxx">C++教程</书名>
<作者>张三</作者>
<售价>50</售价>
</书>
</书架>
//读取xml
SAXReader reader=new SAXReader();
Document document=reader.read(new File("src/book.xml"));
//获取某个元素
Element root=document.getRootElement();
Element book=(Element) root.elements("书").get(1);
Element book=(Element) root.elements("书").get(1);
//读取属性或文本
String value=book.element("书名").getText();
String value2=book.element("书名").attributeValue("name");
添加内容
SAXReader reader=new SAXReader();
Document document=reader.read(new File("src/book.xml"));
Element book=document.getRootElement().element("书");
book.addElement("售价").setText("111");
Document document=reader.read(new File("src/book.xml"));
Element book=document.getRootElement().element("书");
book.addElement("售价").setText("111");
//在指定位置添加 //删除节点
List list=book.elements();//[书名,作者,售价]
Element price=DocumentHelper.createElement("售价");
price.setText("309元");
list.add(2,price);
Element price=DocumentHelper.createElement("售价");
price.setText("309元");
list.add(2,price);
//删除节点
Element price=document.getRootElement().element("书").element("售价");
price.getParent().remove(price);
price.getParent().remove(price);
//更改内容
Element book=(Element) document.getRootElement().elements("书").get(1);
book.element("作者").setText("张三");
book.element("作者").setText("张三");
在更新删除和增加xml内容时默认写入是使用本地字符集 GBK系列 所以会出现乱码问题
//XMLWriter writer=new XMLWriter(new FileWriter("src/book.xml")); 出现乱码的代码
/ /XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/book.xml"), "UTF-8"));//解决办法
writer.write(document);
writer.close();
如果xml文件是gbk系列的编码 这样写入
// 格式化输出器
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/book.xml"), "gb2312"),format);
writer.write(document);
writer.close();
format.setEncoding("gb2312");
XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/book.xml"), "gb2312"),format);
writer.write(document);
writer.close();
建议使用格式化输出器
如果文件是utf-8
format.setEncoding("utf-8");//保持一致