读取xml文件的方式

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

1,xml文件的读取

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


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

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


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

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

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


DOM实现

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




SAX实现:

  1. @H_403_73@import@H_403_73@java.io.File;
  2. @H_403_73@import@H_403_73@org.dom4j.Document;
  3. @H_403_73@import@H_403_73@org.dom4j.Element;
  4. @H_403_73@import@H_403_73@org.dom4j.io.SAXReader;
  5. @H_403_73@
  6. @H_403_73@
  7. @H_403_73@public@H_403_73@class@H_403_73@sax{
  8. @H_403_73@public@H_403_73@static@H_403_73@void@H_403_73@main(Stringargs[])throws@H_403_73@Exception{
  9. @H_403_73@//创建解析对象@H_403_73@
  10. @H_403_73@SAXReaderreader=new@H_403_73@SAXReader();
  11. @H_403_73@
  12. @H_403_73@
  13. @H_403_73@//读取xml文件@H_403_73@
  14. @H_403_73@Documentdocument=reader.read(new@H_403_73@File("test.xml"@H_403_73@));
  15. @H_403_73@
  16. @H_403_73@
  17. @H_403_73@//获取根节点@H_403_73@
  18. @H_403_73@Elementroote=document.getRootElement();
  19. @H_403_73@//获取根节点下面的子节点@H_403_73@
  20. @H_403_73@Stringchilde=roote.elementText("学生"@H_403_73@);
  21. @H_403_73@System.out.println(roote.getName());
  22. @H_403_73@System.out.println(childe);
  23. @H_403_73@}
  24. @H_403_73@}



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

SAX实现+xpath

  1. @H_403_73@package@H_403_73@com.bjpowernode.xml;
  2. @H_403_73@
  3. @H_403_73@
  4. @H_403_73@import@H_403_73@java.io.File;
  5. @H_403_73@
  6. @H_403_73@
  7. @H_403_73@import@H_403_73@org.dom4j.Document;
  8. @H_403_73@import@H_403_73@org.dom4j.Element;
  9. @H_403_73@import@H_403_73@org.dom4j.io.SAXReader;
  10. @H_403_73@
  11. @H_403_73@public@H_403_73@class@H_403_73@SAXandxpath{
  12. @H_403_73@public@H_403_73@static@H_403_73@void@H_403_73@main(String[]args)throws@H_403_73@Exception{
  13. @H_403_73@
  14. @H_403_73@SAXReaderreader=new@H_403_73@SAXReader();
  15. @H_403_73@Documentdocument=reader.read(new@H_403_73@File("test.xml"@H_403_73@));
  16. @H_403_73@Stringxpath="/test/学生"@H_403_73@;
  17. @H_403_73@Elementelement=(Element)document.selectSingleNode(xpath);
  18. @H_403_73@System.out.println(element.getText());
  19. @H_403_73@}
  20. @H_403_73@}

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




2,xml文件的写入

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

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


写入后的文件内容

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

猜你在找的XML相关文章