好文档 - 专业文书写作范文服务资料分享网站

java读写xml文件的方法

天下 分享 时间: 加入收藏 我要投稿 点赞

在java环境下读取xml文件的方法主要有4种:DOM、SAX、JDOM、JAXB

1. 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.//获得根节点StuInfo

31.Element elmtStuInfo = doc.getDocumentElement(); 32.//得到所有student节点

33. NodeList nlStudent = elmtStuInfo.getElementsByTagNameNS( 34. strNamespace, \;

35.for (??){

36. //当前student节点元素

37. Element elmtStudent = (Element)nlStudent.item(i);

38. NodeList nlCurrent = elmtStudent.getElementsByTagNameNS(

39. strNamespace, \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(\性别\19.root.appendChild(student);

20.//建立\姓名\元素,添加到学生下面,下同 21.Element name = doc.createElement(\姓名\22.student.appendChild(name);

23.Text tName = doc.createTextNode(studentBean.getName());

24.name.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 locator 8. */

9. public void setDocumentLocator(Locator locator){ 10. } 11./**

12. * 在解析整个文档开始时调用 13. * @throws SAXException 14. */

15. public void startDocument() throws SAXException{

16. System.out.println(\

17. } 18./**

19. * 在解析整个文档结束时调用 20. * @throws SAXException 21. */

22. public void endDocument() throws SAXException{

23. System.out.println(\;

24. } 25./**

26. * 在解析名字空间开始时调用 27. * @param prefix 28. * @param uri

29. * @throws SAXException 30. */

31. public void startPrefixMapping(String prefix 32. , String uri) throws SAXException{ 33. } 34./**

35. * 在解析名字空间结束时调用 36. * @param prefix

37. * @throws SAXException 38. */

39. public void endPrefixMapping(String prefix) throws SAXException{ 40. } 41./**

42. * 在解析元素开始时调用 43. * @param namespaceURI 44. * @param localName 45. * @param qName 46. * @param atts

47. * @throws SAXException 48. */

49. public void startElement(String namespaceURI, String localName

50. , String qName, Attributes atts) throws SAXException{

51. }

52./** 在解析元素结束时调用 53. * @param namespaceURI

54. * @param localName 本地名,如student 55. * @param qName 原始名,如LIT:student 56. * @throws SAXException */

57. public void endElement(String namespaceURI, String localName,String qName) throws SAXException{ 58. if (localName.equals(“student”)){

59. System.out.println(localName+\60. }

61.}

取得元素数据的方法——characters

取得元素数据中的空白的方法——ignorableWhitespace 在解析到处理指令时调用的方法——processingInstruction 当未验证解析器忽略实体时调用的方法——skippedEntity 运行时,只需要使用下列代码:

Java代码

1. MySAXParser mySAXParser = new MySAXParser(); 2. mySAXParser.parserXMLFile(\ 3.JDOM

JDOM的处理方式有些类似于DOM,但它主要是用SAX实现的 。JDOM用Java的数据类型来定义操作数据树的各个节点 。JDOM的性能也很优越。

Java代码

1. import org.jdom.*;

2. import org.jdom.input.*; 3. import org.jdom.output.*;

4. SAXBuilder builder = new SAXBuilder(false); 5. //得到Document

6. Document doc = builder.build(fileURI); 7. //名字空间

8. Namespace ns = Namespace.getNamespace(\du.cn/student/ \

9. //取得所有LIT:student节点的集合

10.List lstStudents = elmtStuInfo.getChildren(\11.for ( ? ){

12. Element elmtStudent = (Element)lstStudents.get(i); 13. elmtStudent.getChildTextTrim(\14.}

15.//修改

16.elmtLesson.getChild(\17.//删除

18.elmtStuInfo.removeChild(\

java读写xml文件的方法

在java环境下读取xml文件的方法主要有4种:DOM、SAX、JDOM、JAXB1.DOM(DocumentObjectModel)此方法主要由W3C提供,它将xml文件全部读入内存中,然后将各个元素组成一棵数据树,以便快速的访问各个节点。因此非常消耗系统性能,对比较大的文档不适宜采用DOM方法来解析。DOMAPI
推荐度:
点击下载文档文档为doc格式
2da4l4ce1e38ccg96p9d
领取福利

微信扫码领取福利

微信扫码分享