DOM4J解析XML

DOM4J介绍
DOM4J是一款开源的库,主要应用于解析XML、XPath和XSLT。由于它使用很简单,目前特别是在大数据领域,DOM4J越来越受到数据分析者的青睐,下面就来看看它是如何解析XML文件的。

使用DOM4J操作XML
在介绍之前,先简单说一说DOM4J的基本语法。
1、读取XML文件,获得document对象。

    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("xmlfiles/dom4jtest.xml"));

2、获取文档根节点(或某个节点)。

    Element root = document.getRootElement();

3、获取根节点(或某个节点)的单个子节点。

    Element child = root.element("name");

4、获取根节点(或某个节点)的多个子节点并进行遍历

    List children=root.elements("name");
    Iterator it = children.iterator();
    while (it.hasNext()){
        Element element = (Element) it.next();
    }

5、添加节点。

    Element newElm=elm.addElement("gender");

6、设置节点内容。

    newElm.setText("男");

7、获取节点内容。

    String childNameText = newElm.getText();

    String childNameText = elm.elementText("gender");

8、删除节点。

    Element childElm = elm.element("name");
    elm.remove(childElm);

9、获取节点属性。

    Attribute attrId = elm.attribute("id");

10、设置节点属性和文本值。

    elm.addAttribute("class","2");

11、获取属性文本值。

    String text = attrId.getValue();

12、删除节点属性。

    Attribute attrId = elm.attribute("id");
    elm.remove(attrId);

13、将文档写入XML文件。

    OutputFormat format=OutputFormat.createPrettyPrint();
    //format.setEncoding("UTF-8");
    XMLWriter writer =new XMLWriter(new OutputStreamWriter(new FileOutputStream("xmlfiles/dom4jtest.xml"),"UTF-8"),format);
    writer.write(document);
    writer.flush();
    writer.close();

使用DOM4J操作XML完整实例

先创建一个xml文件,文件内容如下:

    
    
     
       
        李赞  
        11  
          
        
       
        宋蔚然  
        10  
          
        
       
        桑月  
        10  
          
        
       
        李师师  
        12  
          
        王老师
        
       
        郭啸天  
        10  
          
       
    

DOM4J操作XML代码如下:

    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.OutputStreamWriter;
    import java.util.Iterator;
    import java.util.List;
    
    
    public class Dom4jTest {
        public static void main(String[] args) {
    
            try {
                SAXReader reader =new SAXReader();
                Document document=reader.read(new File("xmlfiles/dom4jtest.xml"));
                //获取根节点
                Element root=document.getRootElement();
                //获取根节点下所有名为student的子节点
                List students = root.elements("student");
                Iterator it = students.iterator();
                //遍历子节点
                while (it.hasNext()){
                    Element elm=(Element)it.next();
                    //在每个student节点增加teacher子节点
                    Element newElm=elm.addElement("teacher");
                    //设置属性内容
                    newElm.setText("王老师");
                    //获取id属性
                    Attribute attrId = elm.attribute("id");
                    //获取id属性内容
                    String textId = attrId.getValue();
                    elm.addAttribute("class","四年级一班");
                    System.out.print(textId+"\t");
                    System.out.print(elm.attribute("class").getValue()+"\t");
                    System.out.print(elm.elementText("name")+"\t");
                    System.out.print(elm.elementText("age")+"\t");
                    System.out.print(elm.elementText("gender")+"\t");
                    System.out.print(elm.elementText("teacher")+"\t");
                    System.out.println();
                }
    
                OutputFormat format= OutputFormat.createPrettyPrint();
                //format.setEncoding("UTF-8");
                XMLWriter xmlWriter=new XMLWriter(new OutputStreamWriter(new FileOutputStream("xmlfiles/dom4jtest.xml"),"UTF-8"),format);
                xmlWriter.write(document);
                xmlWriter.flush();
                xmlWriter.close();
                System.out.println("数据已成功保存。");
    
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

运行结果如下:

	1	四年级一班	李赞		11	男	王老师	
	2	四年级一班	宋蔚然	10	女	王老师	
	3	四年级一班	桑月		10	女	王老师	
	4	四年级一班	李师师	12	女	王老师	
	5	四年级一班	郭啸天	10	男	王老师	
	数据已成功保存

代码执行后xml文件内容如下:

    
    
     
       
        李赞  
        11  
          
        王老师
        
       
        宋蔚然  
        10  
          
        王老师
        
       
        桑月  
        10  
          
        王老师
        
       
        李师师  
        12  
          
        王老师
        
       
        郭啸天  
        10  
          
        王老师
       
    

你可能感兴趣的:(java高级)