这两天做了个天气的小应用,需要用到百度的天气api,获取到的信息是一个xml文档。

所以就从网上查了一下相关的知识,就是关于怎么去解析出来xml文件的信息。

先放一个我自己写的例子,加了点注释,贴这里吧。

package cn.yzy.test;import java.util.List;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.Iterator;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;public class MyTest {/*** DOM4J读写XML示例*/public static void main(String[] args) {// 用变量保存一下xml文件的路径String path = "d:\\temp\\student.xml";// 创建xml的方法createXML(path);// 读取xml文件的方法readXML(path);// 把xml文件读取成StringString xml = readFile(path);// 输出一下xmlSystem.out.println(xml);// 把String的xml解析出来readXMLStr(xml);}/*** readFile 读取文件到String* * @param path* @return*/public static String readFile(String path) {String txt = "";try {// 读取文件File file = new File(path);// 创建输入流InputStreamReader isReader = new InputStreamReader(new FileInputStream(file), "utf-8");// 缓冲区BufferedReader bf = new BufferedReader(isReader);// 循环把文本读取出来String lineTxt = null;while ((lineTxt = bf.readLine()) != null) {txt += lineTxt;}} catch (Exception e) {e.printStackTrace();}// 最后把文本字符串返回return txt;}/*** createXML 创建XML到指定目录* * @param path*/public static void createXML(String path) {// 读取文件,检查文件是否存在,存在就不创建文件了。File file = new File(path);if (!file.exists()) {try {// 创建xml文档,用DocumentHelperDocument dc = DocumentHelper.createDocument();// 在文档里要加入元素节点// 添加 根节点 -> 学生信息Element root = dc.addElement("学生信息");// 在 学生信息节点 中 加入 学生Element stu1 = root.addElement("学生");// 可以设置属性,设置学生 sid 属性为 001stu1.addAttribute("sid", "001");// 在学生里面加入子元素,键值对应Element name1 = stu1.addElement("姓名");name1.setText("张三");Element sex1 = stu1.addElement("性别");sex1.setText("男");Element stu2 = root.addElement("学生");stu2.addAttribute("sid", "002");Element name2 = stu2.addElement("姓名");name2.setText("小红");Element sex2 = stu2.addElement("性别");sex2.setText("女");// xml文档生成,准备写入文件,文件路径和格式设置好。// 输出格式以及编码设置OutputFormat format = new OutputFormat("\n", true);format.setEncoding("utf-8");// 声明一个写文件的类XMLWriter writer = new XMLWriter(new FileOutputStream(path),format);// 写文件,完成后关闭writer.write(dc);writer.close();System.out.println("操作成功");} catch (IOException e) {e.printStackTrace();}} else {System.out.println("文件已存在");}}/*** readXML 读取XML,从指定文件路径* * @param path*/public static void readXML(String path) {try {// 输出文件是否存在System.out.println(new File(path).exists());// 新建一个读取xml文档的对象SAXReader reader = new SAXReader();// 将文件读入DocumentDocument dc = reader.read(path);System.out.println(dc.toString());// 读取根节点Element root = dc.getRootElement();// 遍历根节点下,所有子节点(仅能访问到一层)List nodes = root.elements();for (Iterator it = nodes.iterator(); it.hasNext();) {Element ele = (Element) it.next();System.out.println(ele.getName() + ele.attributeValue("sid"));System.out.println(ele.elementText("姓名"));System.out.println(ele.elementText("性别"));}} catch (DocumentException e) {e.printStackTrace();}System.out.println("--- --- End --- ---");}/*** readXMLStr 从String中读取XML信息* * @param xml*/public static void readXMLStr(String xml) {try {System.out.println("--- --- readXMLStr --- ---");// 同样是创建读取xml的类,但是读取方法参数改为:new StringReader(xml) 从字符串读取SAXReader reader = new SAXReader();Document dc = reader.read(new StringReader(xml));System.out.println(dc.toString());Element root = dc.getRootElement();List nodes = root.elements();for (Iterator it = nodes.iterator(); it.hasNext();) {Element ele = (Element) it.next();System.out.println(ele.getName() + ele.attributeValue("sid"));System.out.println(ele.elementText("姓名"));System.out.println(ele.elementText("性别"));}} catch (DocumentException e) {e.printStackTrace();}System.out.println("--- --- End --- ---");}
}

以下是我从其他一个博客里参考的一些资料,深受启发:

网址:

http://www.blogjava.net/biiau/archive/2008/09/24/231005.html

部分DOM4J的解释

一.Document对象相关

1.读取XML文件,获得document对象.
       SAXReader reader = new SAXReader();
      Document   document = reader.read(new File("input.xml"));

2.解析XML形式的文本,得到document对象.
      String text = "<members></members>";
      Document document = DocumentHelper.parseText(text);

3.主动创建document对象.
       Document document = DocumentHelper.createDocument();
      Element root = document.addElement("members");// 创建根节点

二.节点相关

1.获取文档的根节点.
      Element rootElm = document.getRootElement();

2.取得某节点的单个子节点.
     Element memberElm=root.element("member");// "member"是节点名

3.取得节点的文字
     String text=memberElm.getText();
也可以用:
     String text=root.elementText("name");
这个是取得根节点下的name字节点的文字.

4.取得某节点下名为"member"的所有字节点并进行遍历.
List nodes = rootElm.elements("member");

for (Iterator it = nodes.iterator(); it.hasNext();) {
    Element elm = (Element) it.next();
   // do something
}

5.对某节点下的所有子节点进行遍历.
 for(Iterator it=root.elementIterator();it.hasNext();){
                 Element element = (Element) it.next();
                // do something
             }

6.在某节点下添加子节点.
Element ageElm = newMemberElm.addElement("age");

7.设置节点文字.
ageElm.setText("29");

8.删除某节点.
parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点

9.添加一个CDATA节点.
          Element contentElm = infoElm.addElement("content");
         contentElm.addCDATA(diary.getContent());

contentElm.getText(); // 特别说明:获取节点的CDATA值与获取节点的值是一个方法
            contentElm.clearContent(); //清除节点中的内容,CDATA亦可

三.属性相关.
1.取得某节点下的某属性
             Element root=document.getRootElement();    
             Attribute attribute=root.attribute("size");// 属性名name

2.取得属性的文字
             String text=attribute.getText();
也可以用:
String text2=root.element("name").attributeValue("firstname");
这个是取得根节点下name字节点的属性firstname的值.

3.遍历某节点的所有属性
  Element root=document.getRootElement();    
            for(Iterator it=root.attributeIterator();it.hasNext();){
                 Attribute attribute = (Attribute) it.next();
                 String text=attribute.getText();
                 System.out.println(text);
             }

4.设置某节点的属性和文字.
newMemberElm.addAttribute("name", "sitinspring");

5.设置属性的文字
             Attribute attribute=root.attribute("name");
             attribute.setText("sitinspring");

6.删除某属性
              Attribute attribute=root.attribute("size");// 属性名name
             root.remove(attribute);

四.将文档写入XML文件.
1.文档中全为英文,不设置编码,直接写入的形式.
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
writer.write(document);
writer.close();

2.文档中含有中文,设置编码格式写入的形式.
              OutputFormat format = OutputFormat.createPrettyPrint();
             format.setEncoding("GBK");    // 指定XML编码        
             XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
            
             writer.write(document);
             writer.close();

五.字符串与XML的转换
1.将字符串转化为XML
String text = "<members> <member>sitinspring</member> </members>";
Document document = DocumentHelper.parseText(text);

2.将文档或节点的XML转化为字符串.
             SAXReader reader = new SAXReader();
             Document   document = reader.read(new File("input.xml"));            
             Element root=document.getRootElement();                
             String docXmlText=document.asXML();
             String rootXmlText=root.asXML();
             Element memberElm=root.element("member");
             String memberXmlText=memberElm.asXML();

XML文件的写入和读取(解析)基于DOM4J工具相关推荐

  1. java解析xml文件并写入Excel表

    解析xml文件并写入Excel表 类似于如下格式的xml数据,解析之后将数据写入Excel中 <?xml version="1.0" encoding="UTF-8 ...

  2. python解析xml文件elementtree_Python中使用ElementTree解析XML示例

    [XML基本概念介绍] XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. 概念一: 复制代码 代码如下: # foo元素的起始标签 ...

  3. python解析xml文件选用模块_python语言解析xml文件的常用的有两种方式

    MiniDom方式解析xml xml文件以data.xml为例,具体操作如下: data.xml: 保存用户的信息 Jordy 12345678 20 男 上网 功夫 34443678 18 男 功夫 ...

  4. java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...

    网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...

  5. 1万条xml文件的写入,附加杂类知识

    写这段代码目的:这次需要将集搜客爬取到的10482个XML文件逐个写入TXT文件中,将xml中的标题结点的值作为TXT文件的名字,XML文件结构如下 话不多说,我们放代码: package xmlTo ...

  6. c#中文件的写入与读取

    在我们做名片管理时用到了对于名片的存储与读入问题.首先我们需要获取当前的路径引用using System.IO;命名空间.我们在写入之前先把card类型的一条记录转化成string类型的数组方便写入. ...

  7. python如何读写文件-python文件的写入和读取

    1.txt,xls,doc等文件的使用 f=open("filename","w") 打开一个用于写入的文件,要写入内容时使用f.write("内容& ...

  8. php写excel文件_利用PHPExcel实现Excel文件的写入和读取

    作为一个原本的Java党,用过PHP才知道,原来对于Excel文件的写入和读取原来可以这么简单! 利用PHP实现对于Excel的读取,主要借助于PHPExcel插件来完成. PHPExcel下载地址: ...

  9. VC++中对文件的写入和读取

    VC++中对文件的写入和读取 本文介绍两种方法对文件进行读取和写入操作:1.采用fstream类:2.采用CStdioFile类. CStdioFile继承自CFile,一个CStdioFile对象代 ...

最新文章

  1. MindInsight训练可视整体设计介绍
  2. IJ-java-com-util-common:
  3. 数据挖掘之关联分析六(子图模式)
  4. Card Game Again CodeForces - 818E (双指针)
  5. 英语学习笔记2019-10-11
  6. 过了初试,面试而不了了之
  7. An Implemention of Realtime Gobal Illumination
  8. JDK 19 / Java 19 新特性
  9. 4.Prometheus 监控技术与实践 --- 服务发现
  10. 渗透测试专用浏览器 - Sandcat
  11. PCB中常见的单位换算
  12. EDGE浏览器打开网页缓慢解决
  13. 西门子s7-200的PLC编程软件,帮助程序无法打开问题解决方法
  14. 太上老君的炼丹炉之分布式 Quorum NWR
  15. 查询课程数mysql_mysql_数据查询练习
  16. 谜底是计算机的谜语英语,英语谜语大全及答案
  17. cursor: not-allowed; readonly的升级版,鼠标经过时,显示为禁止图标
  18. spring事务管理tx:Advice详解
  19. 绘制带有角度的CAD图形
  20. Sicily 1090 Highways

热门文章

  1. All men are brothers【并查集+数学】
  2. 心里装着你,思念就很美(我要做一个文艺范儿的程序员)
  3. linux系统用户迁移
  4. [Android疑难杂症]Gallery默认和横竖屏切换选中状态问题(2.3、2.3系统存在)
  5. 数字带通滤波器c语言程序,C语言编写FIR数字低通滤波器
  6. java配置文件工具类,java项目加载配置文件的工具类
  7. 产品部门四大角色——PM/PD/UE/UI
  8. 宁波政务云资源的介绍与申请
  9. FragmentActivity和Activity的具体区别
  10. python实现自动打电话软件_全自动手势联系软件 让你轻轻松松打电话