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

基本概念: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 文件 直接上代码
    在这里插入图片描述
	//将每个方法中需要用的定义成全局常量 
	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();
	}

结果
在这里插入图片描述
增加的方式:

@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("zhouc@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
		//注意 删除节点时需要找到删除节点的父级节点,然后在进行删除

	}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值