加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

解析xml笔记

发布时间:2020-12-16 05:04:04 所属栏目:百科 来源:网络整理
导读:dom是解析xml的底层接口之一(另一种是sax) 而jdom和dom4j则是基于底层api的更高级封装 dom是通用的,而jdom和dom4j则是面向java语言的 DOM编程相对简单,但是速度比较慢,占用内存多 SAX编程复杂一些,但是速度快,占用内存少 DOM4J 虽然 DOM4J 代表了完全独
dom是解析xml的底层接口之一(另一种是sax)
而jdom和dom4j则是基于底层api的更高级封装

dom是通用的,而jdom和dom4j则是面向java语言的


DOM编程相对简单,但是速度比较慢,占用内存多
SAX编程复杂一些,但是速度快,占用内存少


DOM4J
虽然 DOM4J 代表了完全独立的开发结果,但最初,它是 JDOM 的一种智能分支。它合并了许多超出基本 XML 文档表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过 DOM4J API 和标准 DOM 接口具有并行访问功能。从 2000 下半年开始,它就一直处于开发之中。
为支持所有这些功能,DOM4J 使用接口和抽象基本类方法。DOM4J 大量使用了 API 中的 Collections 类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然 DOM4J 付出了更复杂的 API 的代价,但是它提供了比 JDOM 大得多的灵活性。
在添加灵活性、XPath 集成和对大文档处理的目标时,DOM4J 的目标与 JDOM 是一样的:针对 Java 开发者的易用性和直观操作。它还致力于成为比 JDOM 更完整的解决方案,实现在本质上处理所有 Java/XML 问题的目标。在完成该目标时,它比 JDOM 更少强调防止不正确的应用程序行为。
DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。


package test;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.dom4j.io.OutputFormat;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

public class TestWrite {

	public void WriteXml() {
		//文档对象
		Document document = DocumentHelper.createDocument();
		//根节点
		Element root = document.addElement("books");
		//加属性
		root.addAttribute("type","小说");
		//加注释
		root.addComment("书店");
		
		//子元素
		Element book = root.addElement("book");
		book.addAttribute("price","56.5");
		Element title = book.addElement("title");
		title.setText("aaaaa");
		//子元素
		Element book1 = root.addElement("book");
		book1.addAttribute("price","66.5");
		Element title1 = book1.addElement("title");
		title1.setText("bbbbb");
		//子元素
		Element book2 = root.addElement("book");
		book2.addAttribute("price","76.5");
		Element title2 = book2.addElement("title");
		title2.setText("ccccc");

		// 设置字体
		OutputFormat format = OutputFormat.createCompactFormat();
		format.setEncoding("GBK");
		try {
			XMLWriter output = new XMLWriter(new FileWriter(new File(
					"books.xml")),format);
			output.write(document);
			output.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void ReadXml() {
		SAXReader saxReader = new SAXReader();
		try {
			Document document = saxReader.read("books.xml");
			// 1查找属性
			List list = document.selectNodes("//book/@price");// 1查找属性
																// 获取//book/@price的值的集合
			for (int i = 0; i < list.size(); i++) {
				Attribute attr = (Attribute) list.get(i);
				if (Float.parseFloat(attr.getValue()) > 60)
					attr.setValue("1000");// 设置新值
			}
			
			// 2查找元素
			List list1 = document.selectNodes("//title");// 2查找元素book
			for (int j = 0; j < list1.size(); j++) {
				Element elem = (Element) list1.get(j);
				//elem.setText("mmmmmmmmmm");

			}
		
			//3获取价格等于1000的书的标题
			List list2 = document.selectNodes("//book[@price='1000']/title");
			Iterator iter = list2.iterator();
			while (iter.hasNext()) {
			    Element el = (Element) iter.next();
			    System.out.println(el.getText());
			   }

			
			//4 设置字体
			OutputFormat format = OutputFormat.createCompactFormat();// 缩进
			format.setEncoding("GBK");// 字符集

			XMLWriter output = new XMLWriter(new FileWriter(new File(
					"books.xml")),format);
			output.write(document);
			output.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public static void main(String[] args) {
		TestWrite testwrite = new TestWrite();
		testwrite.ReadXml();
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读