zoukankan      html  css  js  c++  java
  • dom4j之创建xml、读取xml、修改xml

    1. 官网 http://sourceforge.net/projects/dom4j/files/ 点击打开链接 下载dom4j的jar包与源码

    2.建立一个java工程 将dom4j-1.6.1.jar添加到工程里面

    3.编写测试代码 Dom4jTest.java

    package com.undergrowth;
    
    
    
    import java.io.File;
    import java.io.FileWriter;
    import java.util.Iterator;
    import java.util.List;
    
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    public class Dom4jTest {
    
    	/**
    	 * @param args
    	 */
    	public static void createDocument(String pathString)
    	{
    		Document document=DocumentHelper.createDocument();
    		Element studentsElement=document.addElement("students");
    		//添加undergrowth学生信息
    		//添加学生节点
    		Element studentElement=studentsElement.addElement("student");
    		//添加注释信息
    		studentElement.addComment("添加undergrowth学生信息");
    		//在学生节点下面添加姓名节点
    		Element nameElement=studentElement.addElement("name");
    		//设置姓名节点的文本信息为undergrowth
    		nameElement.setText("undergrowth");
    		//添加学生的地址节点并设置其内容为云南省昆明市
    		studentElement.addElement("address").setText("云南省昆明市");
    		//添加学生的班级节点 并设置班级节点的姓名属性
    		Element gradeElement=studentElement.addElement("grade");
    		gradeElement.addAttribute("name", "农业信息化");
    		//在班级节点下面添加学院节点
    		Element collegeElement=gradeElement.addElement("college");
    		//设置学院节点的姓名属性 并添加一个人数子节点
    		collegeElement.addAttribute("name", "基信学院");
    		collegeElement.addElement("people").setText("1000");
    		
    		//添加john学生信息 添加过程与上面的是一致的 只是内容信息不同而已
    		Element student2Element=studentsElement.addElement("student");
    		student2Element.addComment("添加john学生信息");
    		Element name2Element=student2Element.addElement("name");
    		name2Element.setText("john");
    		student2Element.addElement("address").setText("海南省海南市");
    		Element grade2Element=student2Element.addElement("grade");
    		grade2Element.addAttribute("name", "计算机");
    		Element college2Element=grade2Element.addElement("college");
    		college2Element.addAttribute("name", "信自学院");
    		college2Element.addElement("people").setText("2000");
    		
    		try {
    			//将设置好的文本写入到xml文件中 OutputFormat.createPrettyPrint()为输出格式的设置
    			XMLWriter writer=new XMLWriter(new FileWriter(new File(pathString)),OutputFormat.createPrettyPrint());
    			writer.write(document);
    			writer.close();
    			System.out.println("已创建student.xml");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public static void readDocument(String pathString)
    	{
    		SAXReader reader=new SAXReader(); //获取一个读取器
    		try {
    			//从文件中读取一个xml文件
    			Document document=reader.read(new File(pathString));
    			//获取根节点
    			Element rootElement=document.getRootElement();
    			//System.out.println(rootElement.asXML());
    			//获取根节点下面的student子节点
    			for(Iterator i=rootElement.elementIterator("student");i.hasNext();)
    			{
    				Element element=(Element) i.next();
    				//获取student节点下面的子节点 并进行遍历
    				Iterator jIterator=element.elementIterator();
    					while(jIterator.hasNext())
    					{
    						
    						Element element2=(Element) jIterator.next();
    						//打印有属性的节点的属性名
    						if(element2.attributeCount()!=0) {
    							List<Attribute> attributes=element2.attributes();
    							for(Attribute attribute:attributes)
    								System.out.println(element2.getName()+"节点,属性有:"+attributes.size()+"个,属性名称为:"+attribute.getName()+",属性值为:"+attribute.getText());
    						}
    						//修改名为undergrowth的学生信息
    						if(element2.getName().equals("name") && element2.getText().equals("undergrowth"))  
    							{ 
    							System.out.println("未修改前 "+element2.getName()+":"+element2.getText());
    							element2.setText("james");
    							System.out.println("修改后 "+element2.getName()+":"+element2.getText());
    							}
    					}
    				
    				
    			}
    			//将修改后的文本 重新写入到读取的文件中
    			XMLWriter writer=new XMLWriter(new FileWriter(new File(pathString)), OutputFormat.createPrettyPrint());
    			writer.write(document);
    			writer.close();
    			System.out.println("已修改student.xml");
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		createDocument("student.xml");
    		readDocument("student.xml");
    	}
    
    }
    


        上面代码都加了详细的注释 这里只是简单的解释一下  createDocument方法里面创建了一个xml文件 包含一个students根节点 两个student子节点 每个student子节点下面包含name,address,grade三个子节点 而grade子节点又包含colleage子节点 colleage 子节点又包含people子节点

       readDocument方法里面读取了生成的studnet.xml文件 并输出了有属性的节点的名称 属性的个数 还有属性的名称与属性值  并将name节点的文本名为undergrowth的名称修改为james


       如果生成的xml文件中文有乱码的话,将java工程的文本文件的编码格式改为utf-8





    运行效果:



      未调用readDocument之前  student.xml 内容如下

    <?xml version="1.0" encoding="UTF-8"?>
    
    <students>
      <student>
        <!--添加undergrowth学生信息-->
        <name>undergrowth</name>
        <address>云南省昆明市</address>
        <grade name="农业信息化">
          <college name="基信学院">
            <people>1000</people>
          </college>
        </grade>
      </student>
      <student>
        <!--添加john学生信息-->
        <name>john</name>
        <address>海南省海南市</address>
        <grade name="计算机">
          <college name="信自学院">
            <people>2000</people>
          </college>
        </grade>
      </student>
    </students>
    


    调用readDocument方法之后

    student.xml 文件内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <students> 
      <student> 
        <!--添加undergrowth学生信息-->  
        <name>james</name>  
        <address>云南省昆明市</address>  
        <grade name="农业信息化"> 
          <college name="基信学院"> 
            <people>1000</people> 
          </college> 
        </grade> 
      </student>  
      <student> 
        <!--添加john学生信息-->  
        <name>john</name>  
        <address>海南省海南市</address>  
        <grade name="计算机"> 
          <college name="信自学院"> 
            <people>2000</people> 
          </college> 
        </grade> 
      </student> 
    </students>
    

    控制台输出信息如下:

    已创建student.xml
    未修改前 name:undergrowth
    修改后 name:james
    grade节点,属性有:1个,属性名称为:name,属性值为:农业信息化
    grade节点,属性有:1个,属性名称为:name,属性值为:计算机
    已修改student.xml
    


  • 相关阅读:
    Azure 中 Linux 虚拟机的大小
    排查在 Azure 中创建、重启 Linux VM 或调整其大小时发生的分配故障
    如何在 Azure 中的 Linux 经典虚拟机上设置终结点
    针对通过 SSH 连接到 Azure Linux VM 时发生的失败、错误或被拒绝问题进行故障排除
    Linux 内核超时导致虚拟机无法正常启动
    Java并发编程(十三)同步容器类
    可以开发着玩一下的web项目
    org.tmatesoft.svn.core.SVNCancelException: svn: E200015: authentication canc
    FastDFS单机搭建以及java客户端Demo
    做前端(单纯页面和js)遇到的问题辑录(一)
  • 原文地址:https://www.cnblogs.com/liangxinzhi/p/4275597.html
Copyright © 2011-2022 走看看