dom4j读写xml
来源:互联网 发布:淘宝定制品怎么退款 编辑:程序博客网 时间:2024/06/03 15:01
DOM4J是一个非常非常优秀的JavaXML API,是jdom的升级品,用来读写XML文件的,且具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。
首先需要下载dom4j的jar包:dom4j 1.6.1。本篇文章需要引入dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar。
写xml
写xml文件非常简单,就是不停地在节点下添加子节点。
<span style="font-family:KaiTi_GB2312;font-size:18px;">import java.io.FileWriter;import java.io.IOException;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;/** * @Description: 写xml */public class TestXmlWriter{public static void main(String[] args){// XML 声明 <?xml version="1.0" encoding="UTF-8"?> 自动添加到 XML文档中 // 使用DocumentHelper类创建文档实例(生成 XML文档节点的 dom4j API工厂类) Document doc=DocumentHelper.createDocument();// addElement():创建根元素 items(用于向 XML 文档中增加元素) Element rootElt=doc.addElement("items");//在items节点下添加item节点Element itemElt=rootElt.addElement("item");//addAttribute()方法:在item节点内添加id和name属性 itemElt.addAttribute("id", "0001"); itemElt.addAttribute("name", "wanglp"); //在item节点下添加id元素Element idElt=itemElt.addElement("id");//设置id的值idElt.setText("10023");//在item节点下添加name元素Element nameElt=itemElt.addElement("name");//设置name的值nameElt.setText("吉林省");//打印xml内容String xmlString=doc.asXML();System.out.println(xmlString);/*try{OutputFormat format=OutputFormat.createPrettyPrint();format.setEncoding("GBK");//设置xml文件编码的格式//将xml写入test.xml文件中XMLWriter writer=new XMLWriter(new FileWriter("h:\\test.xml"));writer.write(doc);writer.close();System.out.println("写XML成功!");} catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();}*/}}</span>
读xml文件
xml文件:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?><employees> <!--An XML Note --> <?target text?> <employee id="lo" name="lele"> <sex>m</sex> <age>23</age> </employee> <employee id="ve" name="fox"> <sex>f</sex> <age>22</age> </employee> </employees> </span>利用节点读取xml文件
<span style="font-family:KaiTi_GB2312;font-size:18px;">/** * 利用dom4j进行xml文档的读取操作 */ public void parserXml(File file) { Document document = null; // 使用 SAXReader 解析 XML 文档 catalog.xml: SAXReader saxReader = new SAXReader(); try { document = saxReader.read(file); } catch (DocumentException e) { e.printStackTrace(); } // 将字符串转为XML // document = DocumentHelper.parseText(fileString); // 获取根节点 Element root = document.getRootElement(); // 打印节点名称 System.out.println("<" + root.getName() + ">"); //打印<employees> // 获取根节点下的子节点遍历 Iterator<?> iter = root.elementIterator("employee"); // 遍历employee节点 while (iter.hasNext()) { // 获取当前子节点 Element empEle = (Element) iter.next(); System.out.println("<" + empEle.getName() + ">"); //<employee> // 获取当前子节点的属性遍历 Iterator<?> attrList = empEle.attributeIterator(); while (attrList.hasNext()) { Attribute attr = (Attribute) attrList.next(); System.out.println(attr.getName() + "=" + attr.getValue()); //id=lo,,name=lele } // 遍历employee节点下所有子节点 Iterator<?> eleIte = empEle.elementIterator(); while (eleIte.hasNext()) { Element ele = (Element) eleIte.next(); System.out.println("<" + ele.getName() + ">" + ele.getTextTrim()); //<sex>m ,,<age>23 } // 获取employee节点下的子节点sex值 // String sex = empEle.elementTextTrim("sex"); // System.out.println("sex:" + sex); } System.out.println("</" + root.getName() + ">"); } </span>
根据字符串读取xml文件
这种方式读取xml文件时,xml文件中不能有重复的标签,也就是说我们需要将xml文件中的employee标签写成唯一。否则就会出错。
<span style="font-family:KaiTi_GB2312;font-size:18px;"> //这种方式读取xml文件,xml文件中不能有重复的标签 public void ReadXml(InputStream in){ SAXReader reader = new SAXReader(); try { //读取配置文件 Document doc = reader.read(in); //上面这部分一样, //获取配置文件中的相关信息 Element sexElt = (Element)doc.selectObject("/employees/employee/sex");Element ageElt = (Element)doc.selectObject("/employees/employee/age"); System.out.println(sexElt.getStringValue()); System.out.println(ageElt.getStringValue());} catch (DocumentException e) {e.printStackTrace();} }</span>客户端调用
<span style="font-family:KaiTi_GB2312;font-size:18px;">public static void main(String[] args) {DOM4JReadXML dom4j = new DOM4JReadXML(); //使用输入流得到要读取的xml文件//读取classpath下的TestXMLFile.xml文件//ClassLoader类的getResource(String name),getResourceAsStream(String name)等方法,//使用相对于当前项目的classpath的相对路径来查找资源。InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("TestXMLFile.xml");dom4j.ReadXml(in);//使用File查找xml文件 File file = new File("e:/TestXMLFile.xml"); dom4j.parserXml(file); }</span>
使用InputStream输入流查找xml文件,可以查找到classpath下的xml文件,使用相对路径;使用File查找xml文件,可以使用绝对路径,也可以使用相对路径(File file = new File("src/TestXMLFile.xml"),就是在classpath下查找xml文件)。在代码中,我们最好不要使用绝对路径。
其他读写xml文件方法参考:http://blog.csdn.net/sdsky1987/article/details/7286306。
0 0
- Dom4j读写xml文件
- dom4j读写xml
- dom4j读写xml文件
- dom4j读写xml文件
- dom4j读写xml文件
- dom4j读写xml文件
- dom4j读写xml文件
- dom4j 读写xml文件
- dom4j读写xml
- dom4j读写xml文件
- dom4j读写xml文件
- dom4j读写xml文件
- dom4j读写xml文件
- dom4j读写xml文件
- Dom4j读写XML
- dom4j读写xml文件
- dom4j读写XML文件
- dom4j读写xml文件
- [caffe]深度学习之图像分类模型AlexNet解读
- mongodb安装
- 【Dialer】android6.0拨号界面分析<一>
- Acitivity切换黑屏
- 让Xcode的 stack trace信息可读
- dom4j读写xml
- 嵌入式ARM开发平台-迅为最新iTOP-4418开发板
- RecyclerView之下拉刷新、下拉加载的实现
- pipy 常见错误及其解决方法
- spring 知识记录
- COM编程入门
- HDU1896(优先队列的应用)
- Rails应用性能优化一例
- shiro 与spring集成