使用Dom4j解析xml

依赖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);
//读取属性或文本
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");

 //在指定位置添加 //删除节点
List list=book.elements();//[书名,作者,售价]

Element price=DocumentHelper.createElement("售价");
price.setText("309元");
list.add(2,price);

 

 //删除节点

Element price=document.getRootElement().element("书").element("售价");
price.getParent().remove(price);

//更改内容

Element book=(Element) document.getRootElement().elements("书").get(1);
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();

建议使用格式化输出器
  如果文件是utf-8
format.setEncoding("utf-8");//保持一致






















































































































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值