package com.example.xml.dom4j;
import java.io.FileOutputStream;
import java.io.FileWriter;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
/**
* dom4j框架学习 使用dom4j框架创建xml文档并输出保存
*
*/
public class Dom4JTest1
{
public static void main(String[] args) throws Exception
{
// 第一种方式:创建文档,并创建根元素
// 创建文档:使用了一个Helper类
Document document = DocumentHelper.createDocument();
// 创建根节点并添加进文档
Element root = DocumentHelper.createElement("student");
document.setRootElement(root);
// 第二种方式:创建文档并设置文档的根元素节点
Element root2 = DocumentHelper.createElement("student");
Document document2 = DocumentHelper.createDocument(root2);
// 添加属性
root2.addAttribute("name", "zhangsan");
// 添加子节点:add之后就返回这个元素
Element helloElement = root2.addElement("hello");
Element worldElement = root2.addElement("world");
helloElement.setText("hello Text");
worldElement.setText("world text");
// 输出
// 输出到控制台
XMLWriter xmlWriter = new XMLWriter();
xmlWriter.write(document);
// 输出到文件
// 格式
OutputFormat format = new OutputFormat(" ", true);// 设置缩进为4个空格,并且另起一行为true
XMLWriter xmlWriter2 = new XMLWriter(
new FileOutputStream("student.xml"), format);
xmlWriter2.write(document2);
// 另一种输出方式,记得要调用flush()方法,否则输出的文件中显示空白
XMLWriter xmlWriter3 = new XMLWriter(new FileWriter("student2.xml"),
format);
xmlWriter3.write(document2);
xmlWriter3.flush();
// close()方法也可以
}
}
<?xml version="1.0" encoding="UTF-8"?> <student/>
<?xml version="1.0" encoding="UTF-8"?> <student name="zhangsan"> <hello>hello Text</hello> <world>world text</world> </student>
<?xml version="1.0" encoding="UTF-8"?>
<students name="zhangsan">
<hello name="lisi">hello Text1</hello>
<hello name="lisi2">hello Text2</hello>
<hello name="lisi3">hello Text3</hello>
<world name="wangwu">world text1</world>
<world name="wangwu2">world text2</world>
<world >world text3</world>
</students>
package com.example.xml.dom4j;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.DOMReader;
import org.dom4j.io.SAXReader;
/**
* dom4j框架学习: 读取并解析xml
*
*
*/
public class Dom4JTest2
{
public static void main(String[] args) throws Exception
{
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File("students.xml"));
// 获取根元素
Element root = document.getRootElement();
System.out.println("Root: " + root.getName());
// 获取所有子元素
List<Element> childList = root.elements();
System.out.println("total child count: " + childList.size());
// 获取特定名称的子元素
List<Element> childList2 = root.elements("hello");
System.out.println("hello child: " + childList2.size());
// 获取名字为指定名称的第一个子元素
Element firstWorldElement = root.element("world");
// 输出其属性
System.out.println("first World Attr: "
+ firstWorldElement.attribute(0).getName() + "="
+ firstWorldElement.attributeValue("name"));
System.out.println("迭代输出-----------------------");
// 迭代输出
for (Iterator iter = root.elementIterator(); iter.hasNext();)
{
Element e = (Element) iter.next();
System.out.println(e.attributeValue("name"));
}
System.out.println("用DOMReader-----------------------");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
// 注意要用完整类名
org.w3c.dom.Document document2 = db.parse(new File("students.xml "));
DOMReader domReader = new DOMReader();
// 将JAXP的Document转换为dom4j的Document
Document document3 = domReader.read(document2);
Element rootElement = document3.getRootElement();
System.out.println("Root: " + rootElement.getName());
}
}
Root: students total child count: 6 hello child: 3 first World Attr: name=wangwu 迭代输出----------------------- lisi lisi2 lisi3 wangwu wangwu2 null 用DOMReader----------------------- Root: students
package com.example.demo;
import java.io.Serializable;
public class Person implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String _id;
private String _name;
private String _age;
public String get_id() {
return _id;
}
public void set_id(String _id) {
this._id = _id;
}
public String get_name() {
return _name;
}
public void set_name(String _name) {
this._name = _name;
}
public String get_age() {
return _age;
}
public void set_age(String _age) {
this._age = _age;
}
}
public class SAX_parserXML extends DefaultHandler {
/**
* 当开始解析xml文件的声明的时候就会触发这个事件, 可以做一些初始化的工作
* */
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
}
/**
* 当开始解析元素的开始标签的时候,就会触发这个事件
* */
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
}
/**
* 当读到文本元素的时候要触发这个事件.
* */
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
}
/**
* 当读到结束标签的时候 就会触发这个事件
* */
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
}
}
List<Person> persons;
/**
* 当开始解析xml文件的声明的时候就会触发这个事件, 可以做一些初始化的工作
* */
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
// 初始化list
persons = new ArrayList<Person>();
}
/**
* 当开始解析元素的开始标签的时候,就会触发这个事件
* */
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
// 如果读到是person标签 开始存储
if (localName.equals("person")) {
person = new Person();
person.set_id(attributes.getValue("id"));
}
curNode = localName;
}
//步骤
//1.判断是否是person元素
//2.创建新的Person对象
//3.获取id 添加到Person对象中
curNode 用来保存当前的元素名 在characters中会使用到
/**
* 当读到文本元素的时候要触发这个事件.
* */
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
if (person != null) {
//取出目前元素对应的值
String txt = new String(ch, start, length);
//判断元素是否是name
if (curNode.equals("name")) {
//将取出的值添加到person对象
person.set_name(txt);
} else if (curNode.equals("age")) {
person.set_age(txt);
}
}
}
/**
* 当读到结束标签的时候 就会触发这个事件
* */
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
// 如果是 并且person不为空,添加到list
if (localName.equals("person") && person != null) {
persons.add(person);
person = null;
}
curNode = "";
}
public List<Person> ReadXML(InputStream is) {
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser parser = factory.newSAXParser();
// 第一种方法
// parser.parse(is, this);
// 第二种方法
XMLReader reader = parser.getXMLReader();
reader.setContentHandler(this);
reader.parse(new InputSource(is));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return persons;
}
package com.example.demo.Utils;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import com.example.demo.Person;
public class SAX_parserXML extends DefaultHandler {
List<Person> persons;
Person person;
// 当前节点
String curNode;
public List<Person> ReadXML(InputStream is) {
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser parser = factory.newSAXParser();
// 第一种方法
// parser.parse(is, this);
// 第二种方法
XMLReader reader = parser.getXMLReader();
reader.setContentHandler(this);
reader.parse(new InputSource(is));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return persons;
}
/**
* 当开始解析xml文件的声明的时候就会触发这个事件, 可以做一些初始化的工作
* */
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
// 初始化list
persons = new ArrayList<Person>();
}
/**
* 当开始解析元素的开始标签的时候,就会触发这个事件
* */
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
// 如果读到是person标签 开始存储
if (localName.equals("person")) {
person = new Person();
person.set_id(attributes.getValue("id"));
}
curNode = localName;
}
/**
* 当读到文本元素的时候要触发这个事件.
* */
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
if (person != null) {
// 取出目前元素对应的值
String txt = new String(ch, start, length);
// 判断元素是否是name
if (curNode.equals("name")) {
// 将取出的值添加到person对象
person.set_name(txt);
} else if (curNode.equals("age")) {
person.set_age(txt);
}
}
}
/**
* 当读到结束标签的时候 就会触发这个事件
* */
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
// 如果是person结尾 并且person不为空,添加到list
if (localName.equals("person") && person != null) {
persons.add(person);
person = null;
}
curNode = "";
}
}
List<Person> persons = new SAX_parserXML().ReadXML(is);
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < persons.size(); i++) {
Person person =persons.get(i);
buffer.append("id:" + person.get_id() + " ");
buffer.append("name:" + person.get_name() + " ");
buffer.append("age:" + person.get_age() + "n");
}
Toast.makeText(activity, buffer, Toast.LENGTH_LONG).show();
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有