在java中应用dom4j解析xml

    添加时间:2013-5-5 点击量:

    固然Java中已经有了Dom和Sax这两种标准解析体式格式


    但其操纵起来并不轻松,对于我这么一个初学者来说,此中项目组代码是活生生的恶心


    为此,巨大的第三方开辟组开辟出了Jdom和Dom4j等对象


    鉴于今朝的趋势,我们这里来讲讲Dom4j的根蒂根基用法,不涉及递归等错杂操纵



    Dom4j的用法很多,官网上的示例有那么点儿晦涩,这里就不写了


    起首我们须要出创建一个xml文档,然后才干对其解析


    xml文档:



    <?xml version=1.0 encoding=UTF-8?> 
    
    <books>
    <book id=001>
    <title>Harry Potter</title>
    <author>J K. Rowling</author>
    </book>
    <book id=002>
    <title>Learning XML</title>
    <author>Erik T. Ray</author>
    </book>
    </books>


     


    示例一:用List列表的体式格式来解析xml



    import java.io.File;
    
    import java.util.List;

    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;



    public class Demo {

    public static void main(String[] args) throws Exception {
    SAXReader reader = new SAXReader();
    File file = new File(books.xml);
    Document document = reader.read(file);
    Element root = document.getRootElement();
    List<Element> childElements = root.elements();
    for (Element child : childElements) {
    //未知属性名景象下
    /List<Attribute> attributeList = child.attributes();
    for (Attribute attr : attributeList) {
    System.out.println(attr.getName() + : + attr.getValue());
    }/

    //已知属性名景象下
    System.out.println(id: + child.attributeValue(id));

    //未知子元素名景象下
    /List<Element> elementList = child.elements();
    for (Element ele : elementList) {
    System.out.println(ele.getName() + : + ele.getText());
    }
    System.out.println();/

    //已知子元素名的景象下
    System.out.println(title + child.elementText(title));
    System.out.println(author + child.elementText(author));
    //这行是为了格局化美观而存在
    System.out.println();
    }
    }

    }



    示例二:应用Iterator迭代器的体式格式来解析xml



    import java.io.File;
    
    import java.util.Iterator;

    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;



    public class Demo {
    public static void main(String[] args) throws Exception {
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File(books.xml));
    Element root = document.getRootElement();

    Iterator it = root.elementIterator();
    while (it.hasNext()) {
    Element element = (Element) it.next();

    //未知属性名称景象下
    /Iterator attrIt = element.attributeIterator();
    while (attrIt.hasNext()) {
    Attribute a = (Attribute) attrIt.next();
    System.out.println(a.getValue());
    }/

    //已知属性名称景象下
    System.out.println(id: + element.attributeValue(id));

    //未知元素名景象下
    /Iterator eleIt = element.elementIterator();
    while (eleIt.hasNext()) {
    Element e = (Element) eleIt.next();
    System.out.println(e.getName() + : + e.getText());
    }
    System.out.println();/

    //已知元素名景象下
    System.out.println(title: + element.elementText(title));
    System.out.println(author: + element.elementText(author));
    System.out.println();
    }
    }
    }


     运行成果:



    示例三:创建xml文档并输出到文件



    import java.io.File;
    
    import java.io.FileOutputStream;

    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.XMLWriter;


    public class Demo {
    public static void main(String[] args) throws Exception {
    Document doc = DocumentHelper.createDocument();
    //增长根节点
    Element books = doc.addElement(books);
    //增长子元素
    Element book1 = books.addElement(book);
    Element title1 = book1.addElement(title);
    Element author1 = book1.addElement(author);

    Element book2 = books.addElement(book);
    Element title2 = book2.addElement(title);
    Element author2 = book2.addElement(author);

    //为子节点添加属性
    book1.addAttribute(id, 001);
    //为元素添加内容
    title1.setText(Harry Potter);
    author1.setText(J K. Rowling);

    book2.addAttribute(id, 002);
    title2.setText(Learning XML);
    author2.setText(Erik T. Ray);

    //实例化输出格局对象
    OutputFormat format = OutputFormat.createPrettyPrint();
    //设置输出编码
    format.setEncoding(UTF-8);
    //创建须要写入的File对象
    File file = new File(D: + File.separator + books.xml);
    //生成XMLWriter对象,机关函数中的参数为须要输出的文件流和格局
    XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
    //开端写入,write办法中包含上方创建的Document对象
    writer.write(doc);
    }
    }


     运行成果:


    无论对感情还是对生活,“只要甜不要苦”都是任性而孩子气的,因为我们也不完美,我们也会伤害人。正因为我们都不完美,也因为生活从不是事事如意,所以对这些“瑕疵”的收纳才让我们对生活、对他人的爱变得日益真实而具体。—— 汪冰《世界再亏欠你,也要敢于拥抱幸福》
    分享到: