在同时SAX方式生成XML时处理空指针问题
代码:
// ......
handler.setResult(resultxml);
handler.startDocument();
// xml元素
AttributesImpl attr = new AttributesImpl();
attr.addAttribute("", "", "xmlns:xsi", "", "http://www.w3.org/2001/XMLSchema-instance");
attr.addAttribute("", "", "xsi:noNamespaceSchemaLocation", "", "关联关系XML Schema-3.0.xsd");
attr.addAttribute("", "", "License", "", "Gicom");
handler.startElement("", "", "Document", attr);
attr = new AttributesImpl();
attr.addAttribute("", "", "version", "", null); // (1处) 元素Events的属性为null,导致的NullPointerException
handler.startElement("", "", "Events", attr); // (1’处)
attr = new AttributesImpl();
attr.addAttribute("", "", "name", "", "RelationCreate");
handler.startElement("", "", "Event", attr); // (2处) java.lang.NullPointerException
空指针指向
handler.startElement("", "", "Event", attr);
而当前行,handler和attr均非空
错误信息:
java.lang.NullPointerException
at org.apache.xml.serializer.ToStream.writeAttrString(ToStream.java:1915)
at org.apache.xml.serializer.ToStream.processAttributes(ToStream.java:1895)
at org.apache.xml.serializer.ToStream.closeStartTag(ToStream.java:2360)
at org.apache.xml.serializer.ToStream.startElement(ToStream.java:1732)
at org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1020)
at com.geap.gpwms.preStorage.service.impl.PreStorageServiceImpl.startElement(PreStorageServiceImpl.java:2784)
at com.geap.gpwms.preStorage.service.impl.PreStorageServiceImpl.createRelationFile4storage(PreStorageServiceImpl.java:2626)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
其实原因在于handler处理的上一个元素(1’处)不会立即解析当前属性,当调用handler做下一步操作时,才解析。导致的空指针指向与实际情况不一致。
另外,关于上面一点说明我们从单个闭合标签的出现也可以说明。
handler.startElement("", "", "Code", code); // (3)
handler.endElement("", "", "Code"); //(4)
得到的文件是:
<Code curCode="81004670013244603097"/>
而不是:
<Code curCode="81004670013244603097"></Code>
说明handler是在解析到(4)是才写入文件,并且发现Code开启后马上关闭,所以是一个闭合标签。
- 大小: 25.5 KB
分享到:
相关推荐
在Java中,使用SAX生成XML文件并不常见,因为SAX通常用于解析,而不是创建。然而,通过自定义`ContentHandler`,我们可以控制XML元素的生成过程。`ContentHandler`是一个接口,包含如`startElement`、`endElement`...
SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...
本文将深入探讨两种主要的XML文件生成方法:SAX(Simple API for XML)和DOM(Document Object Model),并结合Android环境进行详细阐述。 首先,我们来看SAX解析器。SAX是一种事件驱动的解析器,它不会一次性加载...
SAX(Simple API for XML)是XML解析的一种方法,它以事件驱动的方式处理XML文档,非常适合处理大体积的XML文件,因为它不需要一次性加载整个文件到内存,而是逐行读取,因此节省了资源。 **SAX解析XML的基本原理:...
在处理XML数据时,SAX(Simple API for XML)是一种常见的解析器,它采用事件驱动模型,以流式方式读取XML文档,降低了内存占用,适用于处理大型XML文件。本主题将深入探讨如何在Servlet中利用SAX解析XML文档。 ...
Java SAX(Simple API for XML)解析器是一种基于事件驱动的XML解析方式,它不将整个XML文档加载到内存中,而是逐行读取,当遇到某个事件(如开始标签、结束标签等)时,会触发相应的事件处理器方法。这种方式节省了...
SAX(Simple API for XML)是XML解析器的一种,它以事件驱动的方式解析XML文档,而非DOM(Document Object Model)解析器那样将整个XML文档加载到内存中。SAX解析器在处理大型XML文件时更高效,因为它只在需要时读取...
QT使用SAX读取xml高效-快速.rar SAX(Simple API for XML) 如果你只想读取并显示整个XML文档,那么SAX是很好的选择,因为它提供了比DOM更简单的接口,并且它不需要将整个XML文档一次性读入内存,这样便可以用来读取...
在Android和Java编程中,处理XML文件是常见的任务,而SAX(Simple API for XML)是一种轻量级、事件驱动的XML解析器,它以流式方式读取XML文档,只在需要时解析内容,因此非常适合处理大体积的XML文件。 SAX解析器...
一个实现SAX的解析器(也就是“SAX Parser”)以一个串流解析器的型式作用,拥有事件驱动API。由使用者定义回调函数,解析时,若发生事件的话会被调用。SAX事件包括: XML 文字 节点 XML 元素 节点 XML 虚理指令 ...
Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有...
SAX(Simple API for XML)是XML解析器的一种,它采用事件驱动的方式对XML文档进行解析,而不是一次性加载整个文档到内存中,因此在处理大型XML文件时,SAX解析器具有较高的性能和较低的内存消耗。 标题“sax解析...
Java中,可以使用`SAXParserFactory`来生成`SAXParser`,然后调用`parse()`方法解析XML文件。例如: ```java SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory....
在Java中,有多种方式可以解析XML文档,其中最常用的是DOM(Document Object Model)和SAX(Simple API for XML)。本篇文章将详细介绍DOM和SAX解析XML的方法,并通过提供的`DomDemo.java`和`SaxDemo.java`示例代码...
SAX(Simple API for XML)是一种轻量级的XML解析技术,主要用于读取XML文档。相较于DOM(Document Object Model)解析器,SAX解析器占用更少的内存和处理时间,因为它不会一次性加载整个XML文档到内存,而是采用...
Java作为一种强大的编程语言,提供了多种解析XML文档的方法,其中包括DOM(Document Object Model)和SAX(Simple API for XML)。本压缩包文件“XML-java.rar”包含了关于使用Java解析XML的实例,特别强调了SAX解析...
使用SAX方式解析XML SAX 是读取和操作 XML 数据的更快速、更轻量的方 法。SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。它不涉及 DOM 所必需的开销和概念跳跃。 SAX API是一个基于事件...
本篇我们将深入探讨SAX(Simple API for XML)解析XML的实例。 SAX,全称为Simple API for XML,是一种基于事件驱动的解析方式。与DOM(Document Object Model)解析器不同,SAX并不将整个XML文档加载到内存中形成...
XML(eXtensible Markup Language)是一种用于存储和...通过阅读指定的博客文章(http://www.cnblogs.com/tianzhijiexian/p/4020250.html),你可以找到更多关于如何结合使用SAX和PULL解析XML并生成新XML的详细信息。