读取xml文件的方式

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

1,xml文件的读取@H_502_2@

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


@H_502_2@

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

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


@H_502_2@

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

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

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

@H_502_2@
DOM实现
@H_502_2@

@H_502_2@

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



@H_502_2@


SAX实现:
@H_502_2@

@H_502_2@

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



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

@H_502_2@@H_502_2@

SAX实现+xpath
@H_502_2@

@H_502_2@

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

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



@H_502_2@
@H_502_2@

2,xml文件的写入@H_502_2@

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

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


写入后的文件内容@H_502_2@

@H_502_2@

[html] view plain copy@H_502_2@ print@H_502_2@ ? @H_502_2@ @H_502_2@
  1. <?@H_502_2@xml@H_502_2@@H_502_2@version@H_502_2@=@H_502_2@"1.0"@H_502_2@@H_502_2@encoding@H_502_2@=@H_502_2@"GB18030"@H_502_2@?>@H_502_2@@H_502_2@@H_502_2@
  2. <@H_502_2@学生信息@H_502_2@>@H_502_2@@H_502_2@@H_502_2@
  3. <@H_502_2@学生@H_502_2@id@H_502_2@=@H_502_2@"1"@H_502_2@>@H_502_2@shuangzhe@H_502_2@</@H_502_2@学生@H_502_2@>@H_502_2@@H_502_2@@H_502_2@
  4. <@H_502_2@学生@H_502_2@id@H_502_2@=@H_502_2@"2"@H_502_2@>@H_502_2@litongxue@H_502_2@</@H_502_2@学生@H_502_2@>@H_502_2@@H_502_2@@H_502_2@
  5. </@H_502_2@学生信息@H_502_2@>@H_502_2@@H_502_2@

猜你在找的XML相关文章