假期学习之XML和Json 篇

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();


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值