java用Dom4j来解析XML

来源:互联网 发布:同道伟业大数据 编辑:程序博客网 时间:2024/05/22 14:13


  首先,创建一个工程然后构建路径,点击添加jar包,然后找到jar包添加就行了。

  第一、

<?xml version="1.0" encoding="UTF-8"?>  <students>      <student1 id="001">          <微信公众号>@残缺的孤独</微信公众号>          <学号>20140101</学号>          <地址>北京海淀区</地址>          <座右铭>要么强大,要么听话</座右铭>      </student1>      <student2 id="002">          <新浪微博>@残缺的孤独</新浪微博>          <学号>20140102</学号>          <地址>北京朝阳区</地址>          <座右铭>在哭泣中学会坚强</座右铭>      </student2></students> 

在工程文件下创造一个"123.xml"


写一个遍历XML的函数

private void listNodes(Element node) {//输出当前节点的名称System.out.println("当前节点的名称:" + node.getName());//创建一个node的属性的列表List<Attribute> list = node.attributes();for(Attribute attribute : list) {System.out.println("属性" + attribute.getName() + ":" +attribute.getValue());}//如果节点还有内容的话,输出内容的名字和内容<name>Text</name>if(!node.getTextTrim().equals("")) {System.out.println(node.getName() + ":" + node.getText());}//获得节点的元素的迭代器Iterator<Element> iterator = node.elementIterator();//如果有元素的话递归while(iterator.hasNext()) {Element e = iterator.next();listNodes(e);}}


用一个SAXReader的对象来获取一个Document的对象。进而通过document来获取根节点元素。然后遍历输出

public void test() throws DocumentException {//创建一个SAXReader的对象SAXReader reader = new SAXReader();File file = new File("123.xml");//创建一个Document的对象,从文件中读取数据Document document = reader.read(file);//获取XML的根节点Element root = document.getRootElement();//输出XML的的数据listNodes(root);}

添加属性<student id = 1>的id 就是属性

public void test2() throws DocumentException {//创建一个SAXReader的对象SAXReader reader = new SAXReader();File file = new File("123.xml");//创建一个Document的对象,从文件中读取数据Document document = reader.read(file);//获取XML的根节点Element root = document.getRootElement();System.out.println("---------添加节点前---------");Element student1element = root.element("student1");listNodes(student1element);Attribute idAttribute = student1element.attribute("id");student1element.remove(idAttribute);student1element.addAttribute("newId", "123");System.out.println("---------添加节点后---------");listNodes(student1element);}
attribute(String args)这个函数的是用来获取一个名字为"args"的属性对象,然后调用remove来删除这个属性。还可以通过addAttribute("name_attribute","value_attribute")来添加一个名字为"name_attribute",值为"value_attribute"的属性


public void test3() throws DocumentException {SAXReader reader = new SAXReader();File file = new File("123.xml");Document document = reader.read(file);Element root = document.getRootElement();System.out.println("-------添加节点前-------");Element student1element = root.element("student1");listNodes(student1element);Element phoneElement = student1element.addElement("phone");phoneElement.setText("18792665072");System.out.println("-------添加节点后--------");listNodes(student1element);}
addElement(String name)的作用是加一个名字为“phone”的元素,addElement可以返回一个Element的对象,调用Element的setText(String content)的方法来设置元素的内容。


public void test4() throws DocumentException, IOException {SAXReader reader = new SAXReader();File file = new File("123.xml");Document document = reader.read(file);Element root = document.getRootElement();System.out.println("--------添加节点前-------");Element student1Element = root.element("student1");listNodes(student1Element);Element phoneElement = student1Element.addElement("phone");phoneElement.setText("18792665072");System.out.println("-------添加节点后-------");listNodes(student1Element);//将student1Element1写进文件里writerDocumentToNewFile(document);System.out.println("已经成功写入文件中");}private void writerDocumentToNewFile(Document document) throws IOException {OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("UTF-8");File file = new File("234.xml");FileOutputStream filewriter = new FileOutputStream(file);OutputStreamWriter out = new OutputStreamWriter(filewriter, "UTF-8"); XMLWriter writer = new XMLWriter(out, format);writer.write(document);writer.flush();writer.close();}
可以用一个XMLWriter的对象来把一个XML写进文件中XMLWriter(out,format)来写。OutputFormat来创造一个对象。调用静态方法createPrettyPrint()方法来创建一个输出格式。然后调用format的setEncodin(String charset)来设置输出格式。并通过OutputSteamWriter对象来输出。但是当我使用BufferedReader的方法来输出的时候,会出现乱码,只能通过这个方法来输出。



 

原创粉丝点击