XML语言 英文是 Extensible Markup Language 代表扩展标记语言。用来描述和传输数据的。
Html语言跟XML是同等级的,但是Html是用来显示数据的。
XML特性:区分大小写。只有一个根元素。可以用中文标记。缺点就是太过于臃肿。
XML约束:DTD约束 和 XSD约束 。用来约束文本体中可使用的标签库。
XML解析的三种方式:JDOM DOM4J SAX
JDOM:读取xml文件解析:1.利用运行时类来获取对应xml文件的输入流。InputStream is=A.class.getClassLoader().getResourceAsStream("...xml");
2.利用 SAXBuilder 对象来获取对应文件的Document对象描述文件。SAXBuilder builder=new SAXBuilder(); Document doc=builder.build(is) ;
3.获取跟标签返回Element对象。利用根标签就可以进行子标签的解析了。Element element =doc.getRootElement();
4.通过Element对象获取子标签 List list=element.getChildren("...");
4.1获取属性名值list.getAttributeValue("...");
4.2获取内部的标签 Element element=list.getChlid(“...”);
4.3获取文本值element.getTextTrim();
JDOM:写xml文件解析:1.创建标签:Element root=new Element("root"); Element student=new Element("student"); Element address=new Element("address"); 设置属性值:student.setAttribute("id",...)设置文本值:address.setText("...");
2.标签关联:利用addContent来进行关联。student.addContent(address);root.addContent(student);
3.标签输出:XMLOutputter对象利用Document对象来进行输出:Document doc=new Document(root);XMLOutputter out=new XMLOutputter();out.output(doc,new FileOutputStream(new File("A.class.getClassLoder().getResours().getPath()+"\\...xml"")));
DOM4J:利用DOM4J进行写xml文件:1.利用XMLWriter对象进行最后的写入操作:XMLWriter w=new XMLWriter(new FileOutputStream(new File("A.class.getClassLoader()....")),OutputFormat.createPrettyPrint()); w.write(doc);w.flush();w.close();来进行最后的输出。
2.write()方法中的变量doc是Document的对象。Document doc=DocumentHelper.createDocument(); Element root=doc.addElement("..");增加属性值 root.addAttribute("..","..");增加文本值root.setText("..");
DOM4J:利用DOM4J进行读xml文件:1.利用Documen对象和Element对象就能读出来对应的xml文件。对出来对应的文件放到输入流中:BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(A.class.getClassLoader()....))); 利用循环将数据放到StringBuffer中:StringBuffer sb=new StringBuffer();sb.append(s.trim());
2.获得Document对象:Docment doc=DocumentHelper.parseText(sb.toString());
3.获得Element对象:Element root=doc.getRootElement(); List list =root.elements("...");
注:以上的写是写到对应的硬盘中。如果想在控制台输出需要这样写。DOM4J: System.out.println(doc.asXML()); JDOM:System.out.println(out.outputString(doc));
JDOM和DOM4J是基于文档的模型 ,二SAX是基于事件的模型。性能最好的是DOM4J。因为DOM4J是由JDOM演化而来的。SAX处于中等水平。
SAX:用SAX进行xml文档的读取解析:1.首先我们的类要继承DefaultHandler抽象类。并且对应重写里面的方法:startDocument(),endDocument(),startElement(),endElement(),characters();
2.写对应的read()方法:利用SAXParserFactory对象的newSAXParser()方法返回的对象来进行读取调用。SAXParserFactory sf=SAXParserFactory.newInstance(); SAXParser sp=sf.newSAXParser(); sp.parse(InputStream,DfaultHandler());
3.最后就可以在对应的方法中实现读取的操作了:方法中的第三个形参代表的是标签元素。第四个形参可以取对应的属性值。在characters()方法中可以实现文本的读取 System.out.println(new String(arg0,arg1,arg2));
SAX:实现写先xml的解析:
SAXTransformerFactory stf=(SAXTransformerFactory)SAXTransformerFactory.newInstance();
TransformerHandler th=stf.newTransformerHandler();
Transformer tf=th.getTransformer();
tf.setOutputProperty(OutputKeys.ENCODING, "utf-8");
tf.setOutputProperty(OutputKeys.INDENT, "yes");
//StringWriter sr=new StringWriter();
String path=java.net.URLDecoder.decode(DOM4j.class.getClassLoader().getResource("").getPath());
//System.out.println(path);
File file=new File("c://sax.xml");
FileOutputStream fos=new FileOutputStream(file);
//FileWriter fw =new FileWriter(file);
Result res=new StreamResult(fos);
th.setResult(res);
th.startDocument();
AttributesImpl ai=new AttributesImpl();
th.startElement("", "", "Students", ai);
th.startElement("", "", "Student", ai);
th.startElement("", "", "Name", ai);
String name="...";
th.characters(name.toCharArray(), 0, name.length());
th.endElement("", "", "Name");
ai.addAttribute("", "", "value", "", "学府三");
th.startElement("", "", "Address", ai);
th.endElement("", "", "Address");
th.endElement("", "", "Student");
th.endElement("", "", "Students");
th.endDocument();
System.out.println("ok");
fos.flush();
fos.close();