XML-解析技术续(dom4j解析)

我们知道了常用的dom解析以及sax解析。那么还有别的解析技术吗?答案是肯定的,接下来我将给大家来解释一下另外一个解析技术——dom4j。

什么是dom4j呢?

     Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM开发的。与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4jAPI相对要复杂一些,但它提供了比JDOM更好的灵活性。

     Dom4j 是一个非常优秀的 JavaXML API ,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的 Dom4j ,例如 Hibernate ,包括 sun 公司自己的 JAXM 也用了 Dom4j
     使用 Dom4j 开发,需下载 dom4j 相应的 jar 文件。
 
同样,dom4j也是对于文件的操作,那么有以下几种获取文档对象的方法:

1.读取XML文件,获得document对象            

                   SAXReaderreader = new SAXReader();
 
            Document   document= reader.read(newFile("input.xml"));

¨

  2.解析XML形式的文本,得到document对象.

                 String text = "<members></members>";
             Document document= DocumentHelper.parseText(text);

¨

  3.主动创建document对象.

                Document document= DocumentHelper.createDocument();
 
           //创建根节点

                  Elementroot = document.addElement("members");

下面我主要介绍第一种获取document对象的方式:

xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<四大名著> 
  <西游记 id="x001"> 
    <作者>吴承恩</作者> 
  </西游记>  
  <红楼梦 name="作者"> 
    <朝代>清朝</朝代><![CDATA[asd]]>
  </红楼梦> 
</四大名著>


dom4j解析测试:

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.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

public class Demo01 {

	@Test
	public void test() throws Exception {

		// 创建saxReader对象
		SAXReader reader = new SAXReader();
		// 通过read方法读取一个文件 转换成Document对象
		Document document = reader.read(new File("src/dom4j/sida.xml"));

		Element node = document.getRootElement();
		//listNodes(node);
		
		
		//获取四大名著元素节点中,自节点名称为红楼梦元素的节点
		Element element=node.element("红楼梦");
		
		//删除指定属性
		Attribute attr=element.attribute("id");//获取指定属性
		element.remove(attr);
		
		//添加指定属性
		element.addAttribute("name", "作者");
		
		//在指定节点下面添加文本的操作
		Element newElement=element.addElement("朝代");//获取指定元素节点
		newElement.setText("清朝");
		
		//删除指定节点的操作
		Element author=element.element("作者");//获取想要删除的元素节点
		boolean flag=element.remove(author);//通过该元素节点的父节点调用remove()方法来删除指定节点
		System.out.println(flag);//判断返回的布尔值,如果为真则删除成功,如果为假则删除不成功。
		
		
		
        //插入一个新的CADA区域
		element.addCDATA("asd");//不被编译,原样输出
		writer(document);
	}

	/**
	 * 遍历当前节点元素下面的所有(元素的)子节点
	 * 
	 * @param node
	 */
	public void listNodes(Element node) {
		System.out.println("当前节点的名称::" + node.getName());
		// 获取当前节点的所有属性节点
		List<Attribute> list = node.attributes();
		// 遍历属性节点
		for (Attribute attr : list) {
			System.out.println(node.getName() + "-----" + attr.getName()
					+ "---" + attr.getValue());
			//在这里getText()和getValue()一样
		}
		if (!(node.getTextTrim().equals(""))) {//不把空格和换行输出
			System.out.println("文本内容::::" + node.getText());
		}

		// 当前节点下面子节点迭代器
		Iterator<Element> it = node.elementIterator();
		// 遍历
		while (it.hasNext()) {
			// 获取某个子节点对象
			Element e = it.next();
			// 对子节点进行遍历
			listNodes(e);
		}
	}
	
	/**
	 * 将xml文件写出去
	 * @param document
	 * @throws Exception
	 */
	public void writer(Document document) throws Exception{
		OutputFormat format=OutputFormat.createPrettyPrint();
		format.setEncoding("UTF-8");
		XMLWriter writer=new XMLWriter(new FileWriter("src/dom4j/xx.xml"),format);
		writer.write(document);
		writer.flush();
		writer.close();
		
	}
}


字符串与XML的转换

import java.io.File;
import java.io.FileWriter;

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;
import org.junit.Test;

public class Demo02 {
	@Test
	public void test() throws Exception{
		//test1();
		test2();
		//test3();
	}
	
	//将指定字符串转换为document对象
	public void test1() throws Exception{
		String text="<csdn><java>Java班</java><net>Net班</net></csdn>";
		Document document=DocumentHelper.parseText(text);//通过DocumentHelper的parseText()方法将指定字符串解析为一个document对象
		
		//将文件写出去
		writer(document);
	}
	
	//定义主动创建document对象的方法
	public void test3() throws Exception{
		Document document=DocumentHelper.createDocument();//主动生成document对象
		//设置根节点
		Element root=document.addElement("csdn");
		Element java=root.addElement("java");
		java.setText("2012级-CSDN-java班");
		Element net=root.addElement("net");
		net.setText("2012级-CSDN-net班");
		
		//将文件写出去
		writer(document);
	}
	
	//定义向外写出文件的方法
	public void writer(Document document) throws Exception{
		OutputFormat format=OutputFormat.createPrettyPrint();
		format.setEncoding("UTF-8");
		XMLWriter writer = new XMLWriter(new FileWriter("src/dom4j/a.xml"),format);
		writer.write(document);
		writer.close();
	}
	
	//将xml文件转换为字符串
	public void test2() throws Exception{
		SAXReader reader=new SAXReader();//创建sax读取器对象
		Document document=reader.read(new File("src/dom4j/a.xml"));//通过读取器读取指定xml文件,并将其转换为document对象
		Element root=document.getRootElement();//获取根节点
		
		//将xml文档转换为string字符串
		String docXmlText=document.asXML();
		System.out.println(docXmlText);
		System.out.println("-------------");
		String rootXmlText=root.asXML();
		System.out.println(rootXmlText);
		System.out.println("-------------");
		Element java=root.element("java");
		String s=java.asXML();
		System.out.println(s);
		System.out.println("-------------");
	}
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园失物招领系统管理系统按照操作主体分为管理员和用户。管理员的功能包括字典管理、论坛管理、公告信息管理、失物招领管理、失物认领管理、寻物启示管理、寻物认领管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 校园失物招领系统管理系统可以提高校园失物招领系统信息管理问题的解决效率,优化校园失物招领系统信息处理流程,保证校园失物招领系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 ,管理员权限操作的功能包括管理公告,管理校园失物招领系统信息,包括失物招领管理,培训管理,寻物启事管理,薪资管理等,可以管理公告。 失物招领管理界面,管理员在失物招领管理界面中可以对界面中显示,可以对失物招领信息的失物招领状态进行查看,可以添加新的失物招领信息等。寻物启事管理界面,管理员在寻物启事管理界面中查看寻物启事种类信息,寻物启事描述信息,新增寻物启事信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值