重点 :使用到了包dom4j.jar http://download.youkuaiyun.com/detail/male09/9868245,
或者 http://download.youkuaiyun.com/detail/male09/9880418
开始创建XML文件:
思路:
1.查看当前是否有文件可写
2.插件XML文件
3.写入XML文件数据
用到的导入包:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
//创建XML文件的路径
String xmlPath = "D:/xml/upgrade.xml";
File f = new File("D:/xml");
if (!f.exists()) {
f.mkdirs();
}
File f1 = new File("xmlPath");
f1.createNewFile();
System.out.println(f1.exists());
// 向XML文件写入数据
createNewsXML(xmlPath);
创建XML文件方法
private static void createNewsXML(String xmlPath) {
// TODO Auto-generated method stub
try {
// 创建一个xml文档
Document doc = DocumentHelper.createDocument();
// 向xml文件中添加注释
doc.addComment("这是一个书店的XML文件");
// 创建一个名为Upgrade的节点,因为是第一个创建,所以是根节点,再通过doc创建一个则会报错。
Element root = doc.addElement("书店");
// 在root节点下创建一个名为filedata的节点
Element filEle = root.addElement("博客类");
// 给filedata节点添加
Element detailEle = filEle.addElement("种类");
Element customer_noEle = detailEle.addElement("博客名");
// 设置子节点的文本
customer_noEle.setText("红叶岭谷");
Element software_verEle = detailEle.addElement("博客地址");
software_verEle.setText("http://blog.youkuaiyun.com/male09");
Element listEle = detailEle.addElement("博客资源");
Element hardwareEle = listEle.addElement("Android类");
Element modelEle = hardwareEle.addElement("下载资源");
modelEle.setText("http://download.youkuaiyun.com/detail/male09");
Element verEle = hardwareEle.addElement("下载积分");
verEle.setText("0");
Element authEle = filEle.addElement("博客更新时间");
authEle.setText("实时");
Element dataEle = filEle.addElement("data");
Element sectorEle = dataEle.addElement("sector");
sectorEle.setText("每页数据块");
Element signEle = root.addElement("书店地址");
signEle.setText("红叶岭谷博客1108号");
// 用于格式化xml内容和设置头部标签
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置xml文档的编码为utf-8
format.setEncoding("utf-8");
Writer out;
// 创建一个输出流对象
out = new FileWriter(xmlPath);
// 创建一个dom4j创建xml的对象
XMLWriter writer = new XMLWriter(out, format);
// 调用write方法将doc文档写到指定路径
writer.write(doc);
writer.close();
System.out.print("生成XML文件成功");
} catch (IOException e) {
System.out.print("生成XML文件失败");
e.printStackTrace();
}
}
运行后打开文件效果
<?xml version="1.0" encoding="utf-8"?>
<!--这是一个书店的XML文件-->
<书店>
<博客类>
<种类>
<博客名>红叶岭谷</博客名>
<博客地址>http://blog.youkuaiyun.com/male09</博客地址>
<博客资源>
<Android类>
<下载资源>http://download.youkuaiyun.com/detail/male09</下载资源>
<下载积分>0</下载积分>
</Android类>
</博客资源>
</种类>
<博客更新时间>实时</博客更新时间>
<data>
<sector>每页数据块</sector>
</data>
</博客类>
<书店地址>红叶岭谷博客1108号</书店地址>
</书店>
解析XML文件
思路:
1.获取文件
2.实例化解析工厂
// 创建解析器
SAXReader reader = new SAXReader();
3.读取文件获取解析对象
// 获取解析对象
Document read = reader.read(new File(fileName));
4.开始一层一层的解析:
实例:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public static void main(String[] args) throws Exception {
String xmlPath = "./xml/upgrade.xml";
File f = new File("./xml");
if (!f.exists()) {
f.mkdirs();
}
File f1 = new File("xmlPath");
f1.createNewFile();
// 向XML文件写入数据
// createNewsXML(xmlPath);
parserXml(xmlPath, 6);
}
/**
* 解析xml文件
*
* @param fileName
* 文件路径
* @param depth
* xml最深的标签层次(即:最多有几层)
* @throws Exception
*/
private static void parserXml(String fileName, int depth) throws Exception {
// 创建解析器
SAXReader reader = new SAXReader();
// 获取解析对象
Document read = reader.read(new File(fileName));
Element elementRoot = read.getRootElement();
String rootname = elementRoot.getName();
System.out.println("根节点名称=" + rootname);
// 获取根节点下的子节点集合
Iterator<Element> iterator = elementRoot.elementIterator();
while (iterator.hasNext()) {
Element element = iterator.next();
System.out.println("第一层name = " + element.getName());
List<Element> elements = element.elements();
if (elements != null && elements.size() > 0) {
for (Element elementItem : elements) {
System.out.println("第二层name=" + elementItem.getName());
List<Element> elements2 = elementItem.elements();
if (elements2 != null && elements2.size() > 0) {
for (Element el : elements2) {
System.out.println("第三层name=" + el.getName());
List<Element> elements3 = el.elements();
if (elements3 != null && elements3.size() > 0) {
for (Element element2 : elements3) {
System.out.println("第四层name=" + element2.getName());
List<Element> elements4 = element2.elements();
if(elements4 != null && elements4.size()>0){
for (Element element3 : elements4) {
System.out.println("第五层name="+element3.getName());
List<Element> elements5 = element3.elements();
if(elements5 != null && elements5.size()>0){
//没有了
}else{
System.out.println("第五层Values="+element3.getText().trim());
}
}
}else{
System.out.println("第四层Values="+element2.getText().trim());
}
}
} else {
System.out.println("第三层Values=" + el.getText().trim());
}
}
} else {
System.out.println("第二层values=" + elementItem.getText().trim());
}
}
} else {
System.out.println("第一层values = " + element.getText().trim());
}
}
}
运行结果:
根节点名称=书店
第一层name = 博客类
第二层name=种类
第三层name=博客名
第三层Values=红叶岭谷
第三层name=博客地址
第三层Values=http://blog.csdn.net/male09
第三层name=博客资源
第四层name=Android类
第五层name=下载资源
第五层Values=http://download.csdn.net/detail/male09
第五层name=下载积分
第五层Values=0
第二层name=博客更新时间
第二层values=实时
第二层name=data
第三层name=sector
第三层Values=每页数据块
第一层name = 书店地址
第一层values = 红叶岭谷博客1108号