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();}}}}

浙公网安备 33010602011771号