您的位置:首页 > 编程语言 > Java开发

java用Dom4j来解析XML

2017-11-18 15:25 405 查看
  首先,创建一个工程然后构建路径,点击添加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的方法来输出的时候,会出现乱码,只能通过这个方法来输出。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: