读取xml文件的方式

前端之家收集整理的这篇文章主要介绍了读取xml文件的方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1,xml文件的读取

读取xml文件的方式有两种,一种是面向模型的DOM方式,一种是面向事件的SAX方式


DOM方式原理:一次性的将xml文档加入内存,在内存中形成一颗dom树,然后通过语言对树的节点进行操作。

显然这种操作查找元素快,但是一次性的将文件加载进来,要是小还行,文件大的时候会增大内存负担的,因此这种方式最好是解析小的xml文件的时候用


SAX方式原理:边读边解析,按照从做往右从上往下的顺序解析。

由于解析过的节点不能再次利用,要想使用还得再次解析,所以效率相对来说比较低,但只有事件触发了才会去读取文件,所以内存不会很大。

两种方式,各有优缺点,谁也不能代替谁,举个简单的例子吧,就像生活中的自行车无法取代汽车,汽车无法取代自行车一样,两者各有优势。根据具体需求选择。


DOM实现

  1. importjava.io.File;@H_301_79@
  2. importjavax.xml.parsers.DocumentBuilder;@H_301_79@
  3. importjavax.xml.parsers.DocumentBuilderFactory;@H_301_79@
  4. importorg.w3c.dom.Document;@H_301_79@
  5. importorg.w3c.dom.Node;@H_301_79@
  6. @H_301_79@
  7. @H_301_79@
  8. publicclassdom{@H_301_79@
  9. publicstaticvoidmain(Stringargs[])throwsException{@H_301_79@
  10. //创建文件解析工厂@H_301_79@
  11. DocumentBuilderFactorydfactory=DocumentBuilderFactory.newInstance();@H_301_79@
  12. @H_301_79@
  13. @H_301_79@
  14. //使用工厂创建文件解析类@H_301_79@
  15. DocumentBuilderbuilder=dfactory.newDocumentBuilder();@H_301_79@
  16. @H_301_79@
  17. @H_301_79@
  18. //开始解析文件,将文件加载进内存,形成dom树@H_301_79@
  19. Documentdocument=builder.parse(newFile("test.xml"));@H_301_79@
  20. @H_301_79@
  21. @H_301_79@
  22. //获取根节点并打印出来@H_301_79@
  23. Noderootn=document.getFirstChild();@H_301_79@
  24. System.out.println(rootn.getNodeName());@H_301_79@
  25. }@H_301_79@
  26. }@H_301_79@




SAX实现:

  1. importjava.io.File;@H_301_79@
  2. importorg.dom4j.Document;@H_301_79@
  3. importorg.dom4j.Element;@H_301_79@
  4. importorg.dom4j.io.SAXReader;@H_301_79@
  5. @H_301_79@
  6. @H_301_79@
  7. publicclasssax{@H_301_79@
  8. publicstaticvoidmain(Stringargs[])throwsException{@H_301_79@
  9. //创建解析对象@H_301_79@
  10. SAXReaderreader=newSAXReader();@H_301_79@
  11. @H_301_79@
  12. @H_301_79@
  13. //读取xml文件@H_301_79@
  14. Documentdocument=reader.read(newFile("test.xml"));@H_301_79@
  15. @H_301_79@
  16. @H_301_79@
  17. //获取根节点@H_301_79@
  18. Elementroote=document.getRootElement();@H_301_79@
  19. //获取根节点下面的子节点@H_301_79@
  20. Stringchilde=roote.elementText("学生");@H_301_79@
  21. System.out.println(roote.getName());@H_301_79@
  22. System.out.println(childe);@H_301_79@
  23. }@H_301_79@
  24. }@H_301_79@



注意:需要导入dom4j的jar包,如果不使用工具需要配置classpath环境变量才能使用jar。
如果有多个学生标签,会返回第一个标签内容

SAX实现+xpath

  1. packagecom.bjpowernode.xml;@H_301_79@
  2. @H_301_79@
  3. @H_301_79@
  4. importjava.io.File;@H_301_79@
  5. @H_301_79@
  6. @H_301_79@
  7. importorg.dom4j.Document;@H_301_79@
  8. importorg.dom4j.Element;@H_301_79@
  9. importorg.dom4j.io.SAXReader;@H_301_79@
  10. @H_301_79@
  11. publicclassSAXandxpath{@H_301_79@
  12. publicstaticvoidmain(String[]args)throwsException{@H_301_79@
  13. @H_301_79@
  14. SAXReaderreader=newSAXReader();@H_301_79@
  15. Documentdocument=reader.read(newFile("test.xml"));@H_301_79@
  16. Stringxpath="/test/学生";@H_301_79@
  17. Elementelement=(Element)document.selectSingleNode(xpath);@H_301_79@
  18. System.out.println(element.getText());@H_301_79@
  19. }@H_301_79@
  20. }@H_301_79@

使用xpath达到快速定位的效果。使用时需要导入相应的jar包




2,xml文件的写入

Dom方式:使用dom方式写入xml文件(基于dom4j)

  1. importjava.io.FileWriter;@H_301_79@
  2. importorg.dom4j.Document;@H_301_79@
  3. importorg.dom4j.DocumentHelper;@H_301_79@
  4. importorg.dom4j.Element;@H_301_79@
  5. importorg.dom4j.io.OutputFormat;@H_301_79@
  6. importorg.dom4j.io.XMLWriter;@H_301_79@
  7. @H_301_79@
  8. @H_301_79@
  9. publicclassdomwrite{@H_301_79@
  10. publicstaticvoidmain(Stringargs[])throwsException{@H_301_79@
  11. //创建一个文档对象@H_301_79@
  12. Documentdocument=DocumentHelper.createDocument();@H_301_79@
  13. @H_301_79@
  14. @H_301_79@
  15. //构造dom树@H_301_79@
  16. Elementroote=document.addElement("学生信息");@H_301_79@
  17. Elementchile=roote.addElement("学生");@H_301_79@
  18. chile.addAttribute("id","1");@H_301_79@
  19. chile.setText("shuangzhe");@H_301_79@
  20. Elementchile1=roote.addElement("学生");@H_301_79@
  21. chile1.addAttribute("id","2");@H_301_79@
  22. chile1.setText("litongxue");@H_301_79@
  23. @H_301_79@
  24. @H_301_79@
  25. @H_301_79@
  26. //设置字符编码方式@H_301_79@
  27. OutputFormatformat=OutputFormat.createPrettyPrint();@H_301_79@
  28. format.setEncoding("GB18030");@H_301_79@
  29. @H_301_79@
  30. @H_301_79@
  31. //开始写@H_301_79@
  32. XMLWriterxmlWriter=newXMLWriter(newFileWriter("student.xml"),format);@H_301_79@
  33. xmlWriter.write(document);@H_301_79@
  34. xmlWriter.close();@H_301_79@
  35. }@H_301_79@
  36. }@H_301_79@


写入后的文件内容

  1. <?xmlversion="1.0"encoding="GB18030"?>@H_301_79@
  2. <学生信息>@H_301_79@
  3. <学生id="1">shuangzhe</学生>@H_301_79@
  4. <学生id="2">litongxue</学生>@H_301_79@
  5. </学生信息>@H_301_79@

猜你在找的XML相关文章