XML文件(2)--使用DOM4J示例
- 其他依赖字段/方法
private List<Book> bookList = new LinkedList<Book>();public List<Book> getBookList(String file) {parseXML(file);return this.bookList;}
- 获取DocumentBuilder(文件解析器)
/*** 解析XML文件* * @param file*/private void parseXML(String file) {// 创建book临时变量Book book = null;// 1.创建SAXReader对象SAXReader reader = new SAXReader();// 2.1 创建输入流InputStreamReader input = null;try {// 2.2 实例化输入流,并指定编码input = new InputStreamReader(new FileInputStream(file), "utf-8");// 3.加载XML文件到 documentDocument document = reader.read(input);// 4.获取根节点Element rootElement = document.getRootElement();// 5.根据根节点获取子节点迭代器,并遍历Iterator bookIter = rootElement.elementIterator();while (bookIter.hasNext()) {// 初始化book对象book = new Book();// 声明子节点对象Element bookEle = (Element) bookIter.next();// 如果子节点为bookif (bookEle.getName().equals("book")) {// 6.获取book节点的属性迭代器,并遍历Iterator eleIter = bookEle.attributeIterator();while (eleIter.hasNext()) {// 声明属性对象Attribute attr = (Attribute) eleIter.next();if (attr.getName().equals("id")) {book.setId(Integer.valueOf(attr.getValue()));}}// 7.获取book节点的子节点迭代器,并遍历Iterator childIter = bookEle.elementIterator();while (childIter.hasNext()) {// 声明book子节点对象Element child = (Element) childIter.next();// 判断并为book对象赋值switch (child.getName()) {case "title":book.setTitle(child.getText());break;case "author":book.setAuthor(child.getText());break;case "price":book.setPrice(Double.valueOf(child.getText()));break;case "year":book.setYear(child.getText());break;case "language":book.setLanguage(child.getText());break;default:System.out.println("未知属性!");}}// 向书籍列表添加书籍对象bookList.add(book);}}} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (null != input) {try {input.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
- 生成XML文件
/*** 创建XML文件,保存book列表* @param bookList* @param fileName* @param encoding*/private void createXML1(List<Book> bookList, String fileName,String encoding) {// 1.创建Document文件Document document = DocumentHelper.createDocument();// 2.创建root节点Element root = document.addElement("bookstore");// 3.创建book节点for (Book book : bookList) {Element ebook = root.addElement("book");// 4.1为book节点添加属性ebook.addAttribute("id", String.valueOf(book.getId()));// 4.2为book增加子节点,并设置文本值Element eTitle = ebook.addElement("title");eTitle.addCDATA(book.getTitle());Element eAuthor = ebook.addElement("author");eAuthor.setText(book.getAuthor());Element eYear = ebook.addElement("year");eYear.setText(book.getYear());Element ePrice = ebook.addElement("ePrice");ePrice.setText(String.valueOf(book.getPrice()));Element eLanguage = ebook.addElement("language");eLanguage.setText(book.getLanguage());}// 5.声明输出流OutputStream output = null;XMLWriter writer = null;// 6.设置输出的XML格式OutputFormat format = OutputFormat.createPrettyPrint();// 7.设置XML文档编码format.setEncoding(encoding);try {// 8.实例化输出流output = new FileOutputStream(fileName);// 9.实例化XML输出流,加载XML格式及设置writer = new XMLWriter(output, format);// 10.向硬盘写入XMLwriter.write(document);} catch (FileNotFoundException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (null != output) {try {output.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (null != writer) {try {writer.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
- 创建RSS文件
/*** 创建RSS文件** @param fileName*/private void createXML(String fileName) {// 1.创建document对象,代表XML文件Document document = DocumentHelper.createDocument();// 2.创建根节点Element rss = document.addElement("rss");// 3.为rss节点添加version属性(版本)rss.addAttribute("version", "2");// 3.1生成子节点及节点内容Element channel = rss.addElement("channel");// 3.2生成内容Element title = channel.addElement("title");title.setText("<![CDATA[国内最新新闻]]>");// 4.创建xml输出流File file = new File(fileName);XMLWriter writer = null;try {// 5.设置xml格式OutputFormat format = OutputFormat.createPrettyPrint();// 设置xml编码format.setEncoding("GBK");writer = new XMLWriter(new FileOutputStream(file), format);// 设置是否转义,默认为true(转义)writer.setEscapeText(false);// 6.将XML文件写到硬盘writer.write(document);} catch (UnsupportedEncodingException | FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (null != writer) {try {writer.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
XML文件(2)--使用DOM4J示例的更多相关文章
- XML文件操作之dom4j
能够操作xml的api还是挺多的,DOM也是可以的,不过在此记录下dom4j的使用,感觉确实挺方便的 所需jar包官网地址:http://www.dom4j.org/dom4j-1.6.1/ dom4 ...
- XML文件解析之DOM4J解析
1.DOM4J介绍 dom4j的官网是http://www.dom4j.org/dom4j-1.6.1/,最新的版本是1.6.1,根据官网介绍可知.dom4j是一个易用的.开源的库,应用于Java平台 ...
- XML文件(1)--使用DOM示例
其他依赖字段/方法 // 书籍列表 private List<Book> bookList = new LinkedList<Book>(); /** * 根据xml文件,得到 ...
- Java 读写XML文件 API--org.dom4j
om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,同时它也是一个开放源代码的软件 ...
- 1.使用dom4j解析XML文件
一.dom4j的简介 dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它 ...
- Java进阶(二十七)使用Dom4j解析XML文件
使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...
- 菜鸟学Java(八)——dom4j详解之读取XML文件
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...
- 解析xml文件的几种技术与Dom4j与sax之间的对比
一.解析xml文件的几种技术:dom4j.sax.jaxb.jdom.dom 1.dom4j dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常优秀的 ...
- xml文件的解析(用dom4j解析)
有个第三方的包,用来解析.xml文件比较方便,它是DOM4J.由于是第三方的,所以要使用它就要先下载,并包含进来.步骤: 1.打开dom4j官网,这里下载最新版dom4j-2.1.1.jar. 2.新 ...
随机推荐
- JAVA NIO Socket通道
DatagramChannel和SocketChannel都实现定义读写功能,ServerSocketChannel不实现,只负责监听传入的连接,并建立新的SocketChannel,本身不传输数 ...
- JS和ASP.net相互调用问题
项目开发时,我们有时候会遇到后台asp调用前台的JS函数,又或者前台JS需要调用后台aspx.cs的函数,这里记录下如何处理这些问题 1. ASP后台代码中,如果需要运行JS函数,则使用Regist ...
- Linux基础练习题
1.列出当前系统上所有已经登录的用户名,注意:同一个用户登录多次,则只显示一次即可. [root@bj-1-160-enzhi ~]# who|cut -d ' ' -f 1|uniq -c 2 ro ...
- 为 suse linux 设置程序自动启动
1.suse linux 程序自动启动 在部署面安装的的时候,重启之后需要去tomcat/bin/startup.sh 下面去执行启动脚本. 设置开机自动启动该服务 在 vim /etc/i ...
- APUE学习之多线程编程(一):线程的创建和销毁
一.线程标识 和每个进程都有一个进程ID一样,每个线程也有一个线程ID,线程ID是以pthread_t数据类型来表示的,在Linux中,用无符号长整型表示pthread_t,Solaris ...
- centos mysql开启远程访问
登录MySQL: mysql -u root -p db; 如需修改密码,第一次: mysqladmin -u root password NEWPASSWORD 已设置过: mysqladmi ...
- 【Linux管理】用户管理
每次玩linux都会去网上找一些命令,想想应该记录一下,希望方便大家,当然更方便自己. 1.添加用户 useradd username//添加用户 passwd username//设置密码 2.配置 ...
- 【记录】Ubuntu下安装VirtualBox
之前换了新硬盘,重装了ubuntu,由于学习需要还是要装个虚拟机.以前用过VMWare真的是神卡,这次换VirtualBox,希望开源社区能给我带来曙光:) 添加VirtualBox的源并安装5.1版 ...
- USACO . Greedy Gift Givers
Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided to exchange gifts ...
- Linux 系统常用命令汇总(三) 用户和用户组管理
用户和用户组管理 命令 选项 注解 示例 useradd [选项] 用户名 新建用户 创建一个名为tester的用户,并指定他的UID为555,指定加入test群,指定其使用C-shell: use ...