当前位置:文档之家› java读写xml文件的方法

java读写xml文件的方法

在java环境下读取xml文件的方法主要有4种:DOM、SAX、JDOM、JAXB1. DOM(Document Object Model)此方法主要由W3C提供,它将xml文件全部读入内存中,然后将各个元素组成一棵数据树,以便快速的访问各个节点。

因此非常消耗系统性能,对比较大的文档不适宜采用DOM方法来解析。

DOM API 直接沿袭了 XML 规范。

每个结点都可以扩展的基于 Node 的接口,就多态性的观点来讲,它是优秀的,但是在Java 语言中的应用不方便,并且可读性不强。

实例:Java代码1.import javax.xml.parsers.*;2.//XML解析器接口3.import org.w3c.dom.*;4.//XML的DOM实现5.import org.apache.crimson.tree.XmlDocument;6.//写XML文件要用到7.DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();8. //允许名字空间9. factory.setNamespaceAware(true);10. //允许验证11. factory.setValidating(true);12. //获得DocumentBuilder的一个实例13.try {14. DocumentBuilder builder = factory.newDocumentBuilder();15.} catch (ParserConfigurationException pce) {16.System.err.println(pce);17.// 出异常时输出异常信息,然后退出,下同18.System.exit(1);19.}20.//解析文档,并获得一个Document实例。

21.try {22.Document doc = builder.parse(fileURI);23.} catch (DOMException dom) {24.System.err.println(dom.getMessage());25.System.exit(1);26.} catch (IOException ioe) {27.System.err.println(ioe);28.System.exit(1);29.}30.//获得根节点StuInfo31.Element elmtStuInfo = doc.getDocumentElement();32.//得到所有student节点33. NodeList nlStudent = elmtStuInfo.getElementsByTagNameNS(34. strNamespace, "student");35.for (……){36. //当前student节点元素37. Element elmtStudent = (Element)nlStudent.item(i);38. NodeList nlCurrent = elmtStudent.getElementsByTagNameNS(39. strNamespace, "name");40.}对于读取得方法其实是很简单的,写入xml文件也是一样不复杂。

Java代码1.DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();2.DocumentBuilder builder = null;3.try {4.builder = factory .newDocumentBuilder();5.} catch (ParserConfigurationException pce) {6.System.err.println(pce);7.System.exit(1);8.}9.Document doc = null;10.doc = builder .newDocument();11.//下面是建立XML文档内容的过程,12.//先建立根元素"学生花名册"13.Element root = doc.createElement("学生花名册");14.//根元素添加上文档15.doc.appendChild(root);16.//建立"学生"元素,添加到根元素17.Element student = doc.createElement("学生");18.student.setAttribute("性别", studentBean.getSex());19.root.appendChild(student);20.//建立"姓名"元素,添加到学生下面,下同21.Element name = doc.createElement("姓名");22.student.appendChild(name);23.Text tName = doc.createTextNode(studentBean.getName());.appendChild(tName);25.Element age = doc.createElement("年龄");26.student.appendChild(age);27.Text tAge = doc.createTextNode(String.valueOf(studentBean.getAge()));28.age.appendChild(tAge);2.SAX (Simple API for XML)此方法主要由XML-DEV 邮件列表的成员开发的,SAX是基于事件的方法,它很类似于标签库的处理机制,在标签开始、结束以及错误发生等等地方调用相应的接口实现方法,不是全部文档都读入内存。

SAX具有优异的性能和利用更少的存储空间特点。

SAX 的设计只考虑了功能的强大性,却没有考虑程序员使用起来是否方便。

使用必须扩展ContentHandler、ErrorHandler、DTDHandler等,但是必须扩展ContentHandler(或者DefaultHandler )。

Java代码1.import org.xml.sax.*;2.public class MyContentHandler implements ContentHandler {3.……4.}5./**6. * 当其他某一个调用事件发生时,先调用此方法来在文档中定位。

7. * @param locator8. */9. public void setDocumentLocator(Locator locator){10. }11./**12. * 在解析整个文档开始时调用13. * @throws SAXException14. */15. public void startDocument() throws SAXException{16. System.out.println("** Student information start **");17. }18./**19. * 在解析整个文档结束时调用20. * @throws SAXException21. */22. public void endDocument() throws SAXException{23. System.out.println("**** Student information end ****");24. }25./**26. * 在解析名字空间开始时调用27. * @param prefix28. * @param uri29. * @throws SAXException30. */31. public void startPrefixMapping(String prefix32. , String uri) throws SAXException{33. }34./**35. * 在解析名字空间结束时调用36. * @param prefix37. * @throws SAXException38. */39. public void endPrefixMapping(String prefix) throws SAXException{40. }41./**42. * 在解析元素开始时调用43. * @param namespaceURI44. * @param localName45. * @param qName46. * @param atts47. * @throws SAXException48. */49. public void startElement(String namespaceURI, String localName50. , String qName, Attributes atts) throws SAXException{51. }52./** 在解析元素结束时调用53. * @param namespaceURI54. * @param localName 本地名,如student55. * @param qName 原始名,如LIT:student56. * @throws SAXException */57. public void endElement(String namespaceURI, String localName,String qName) throws SAXException{58. if (localName.equals(“student”)){59. System.out.println(localName+":"+currentData);60. }61.}取得元素数据的方法——characters取得元素数据中的空白的方法——ignorableWhitespace在解析到处理指令时调用的方法——processingInstruction当未验证解析器忽略实体时调用的方法——skippedEntity运行时,只需要使用下列代码:Java代码1.MySAXParser mySAXParser = new MySAXParser();2.mySAXParser.parserXMLFile("SutInfo.xml");3.JDOMJDOM的处理方式有些类似于DOM,但它主要是用SAX实现的。

相关主题