欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

初学DOM4J解析xml文件,及对xml文件的增删改查

程序员文章站 2022-04-30 09:59:59
...

基本概念:XML(eXtensible Markup Language),是一种可扩展的标记语言,类似HTML(超文本标记语言)
前期工作:

  1. 下载dom4j的jar包 (我使用的是1.6.1版本)jar下载链接.
  2. 在eclipse中导入jar包
  3. 准备好一个需要解析的xml文件
  4. 创建SAXReader对象,读取xml文件
  5. 调用read方法,返回document对象
  6. 获取文档中元素
  7. 注意:创建的工程千万千万别写中文,今天因为创建工程时图方便直接写了(xml解析) 然后报错找了接近一个小时,在网上百度各种方式 ,(编码格式等等)全都没解决,最后才发现是自己路径有(解析)两个中文
  8. 下图是需要解析的xml 文件 直接上代码
    初学DOM4J解析xml文件,及对xml文件的增删改查
	//将每个方法中需要用的定义成全局常量 
	File file=null;
	SAXReader saxReader=null;
	Document doc=null;
	Element contacts=null;
	
	@Before
	public void testBefore() throws Exception {
		//首先获取xml路径
		file = new File("xml/contacts.xml");
		// System.out.println(file.getAbsolutePath());//得到绝对路径
		// 然后创建SAXReader 对象
		saxReader = new SAXReader();
		// System.out.println(saxReader);
		// 之后调用read方法,传入需要解析的xml文件
		doc = saxReader.read(file);
		// System.out.println(doc);
		// System.out.println(contacts);
		contacts = doc.getRootElement();//得到xml的根节点
		// System.out.println(contacts);
	}

查询该xml的元素

	@Test
	public void testQuery() throws Exception {// 查询方法
		List<Element> linkmans = contacts.elements();
		// 判断 大小大于0 表示有下一级元素
		if (linkmans.size() > 0 && linkmans != null) {
			// 遍历获取到linkmans下的所有子元素
			for (Element linkman : linkmans) {
				// 获取linkman的属性和属性值
				//Attribute attr = linkman.attribute("id");
				//System.out.println(attr.getName() + attr.getText());
				List<Element> elements = linkman.elements();
				if (elements.size() > 0 && elements != null) {
					for (Element element : elements) {
						// 得到子节点所有的元素和值
						System.out.println(element.getName() + element.getText());
					}
				}
			}
		}
		// 取第一个linkman节点
		Element element = linkmans.get(0);
		System.out.println(element.element("name").getText()); // 取第一个节点中子节点name元素的值
	}

修改方法

@Test
public void testUpdata() throws Exception {
	List<Element> linkmans = contacts.elements();
	Element name = linkmans.get(0).element("name");//获取第一个linkman节点下的name节点元素 然后修改该值
	name.setText("豆豆");
}
//修改完后 会保存在内存中 必须执行写入步骤
@After
	public void testAfter() throws Exception {
		/**
		 * FileWriter out=new FileWriter(file); doc.write(out); out.close();
		 */
		// 以漂亮的方式进行输出
		OutputFormat format = OutputFormat.createPrettyPrint();
		// format = OutputFormat.createCompactFormat(); 这是以紧凑的方式输出
		XMLWriter xmlWriter = new XMLWriter(new FileWriter(file), format);
		xmlWriter.write(doc);
		xmlWriter.close();
	}

结果
初学DOM4J解析xml文件,及对xml文件的增删改查
增加的方式:

@Test
	public void testAdd() throws Exception {
		Element add = contacts.addElement("linkman");//增加根节点下的一级节点
		add.setAttributeValue("id", "values");//给一级节点添加标签
		Element name = add.addElement("name");//在一级节点下增加二级节点
		name.setText("小周");//设置值
		add.addElement("email").setText("aaa@qq.com");
		add.addElement("address").setText("重庆");
	}

删除方式:

	@Test
	public void testDelete() throws Exception {
		List<Element> elements = contacts.elements();
		Element linkman = elements.get(0);// 得到第一个linkman
//		Element name = linkman.element("name");
//		name.getParent().remove(name);//删除第一个linkman下的name
		// linkman.getParent().remove(linkman);//删除整个linkman
		//注意 删除节点时需要找到删除节点的父级节点,然后在进行删除

	}