dtd是限制文件
xsd是dtd的升级版
Sun公司官方的解析方式:DOM 适用多次访问xml
民间版本SAX 适用于数据量较大
上面两种适用起来都异常复杂,于是第三方进行了封装
JDOM 优秀
JDOM的升级版 DOM4J 非常优秀
DOM4J读取xml文件,解析xml文件需要导入DOM4J的jar包
//创建SAXReader
SAXReader reader=new SAXReader();
//得到Document
Document doc=reader.read(new File("src/xml/scores.xml"));
得到Document之后就可以像反射那样使用了
//获取根元素
Element root=doc.getRootElement();
System.out.println(root.getName()+"\n");
//获取根元素下所有子元素 迭代器
Iterator<Element> it=root.elementIterator();
进行一系列操作,Attribute 也可以进行迭代的
while(it.hasNext()){
//取出元素
Element e= (Element)it.next();
System.out.print(e.getName()+"\t");
Attribute id=e.attribute("id");
System.out.println(id.getName()+"="+id.getValue());
Element name=e.element("name");
Element lessons=e.element("lessons");
Element score=e.element("score");
System.out.println(name.getName()+"="+name.getStringValue());
System.out.println(lessons.getName()+"="+lessons.getStringValue());
System.out.println(score.getName()+"="+score.getText());
System.out.println("-----------------------------------------");
}
DOM4J创建xml文件
设置属性 元素.addAttribute
Document doc= DocumentHelper.createDocument();
Element root=doc.addElement("scores");
Element student=root.addElement("student");
student.addAttribute("id","s01");
Element name=student.addElement("name");
Element lessons=student.addElement("lessons");
Element score= student.addElement("score");
name.addText("周某");
lessons.addText("线代");
score.addText("88");
简单输出用doc的write就行,需要创建一个writer输出流,记得关闭流
// 将doc输出到xml文件中,简单输出
Writer writer=new FileWriter(new File("src/xml/scores2.xml"));
doc.write(writer);
writer.close();
但文件中格式是这样的
用DOM4J自带的输出流,和美化的类OutputFormat ,关闭XMLWriter的同时会关闭FileWriter
//格式良好的输出
OutputFormat format=OutputFormat.createPrettyPrint();
XMLWriter writer1=new XMLWriter(new FileWriter(new File("src/xml/scores2.xml")),format);
writer1.write(doc);
writer1.close();