在同时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
分享到:
相关推荐
SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...
android sax ,dom生成xml文件
用sax写的生成大XML文件。 用SAX写的解析大XML文件。 在解析大的XML文件,从java语言来说的话,目前应该SAX是比较好用的一个框架。
Sax解析XML文件解
Java SAX解析Xml Demo(详细注释)
Servlet利用SAX解析XML文档,JAX,JSWDP,Servlet利用SAX解析XML文档
Sax解析xml文件详细例子,解析复杂节点的xml,把内容显示到view中,例子简单完整,易用
一个实现SAX的解析器(也就是“SAX Parser”)以一个串流解析器的型式作用,拥有事件驱动API。由使用者定义回调函数,解析时,若发生事件的话会被调用。SAX事件包括: XML 文字 节点 XML 元素 节点 XML 虚理指令 ...
Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有...
使用Sax解析XML,演示了如何使用SAX接口来解析xml,有主要方法的介绍。
使用SAX方式解析XML SAX 是读取和操作 XML 数据的更快速、更轻量的方 法。SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。它不涉及 DOM 所必需的开销和概念跳跃。 SAX API是一个基于事件...
QT使用SAX读取xml高效-快速.rar SAX(Simple API for XML) 如果你只想读取并显示整个XML文档,那么SAX是很好的选择,因为它提供了比DOM更简单的接口,并且它不需要将整个XML文档一次性读入内存,这样便可以用来读取...
sax解析xml本地读取xml,希望对你有用
使用sax解析xml的源代码
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
本代码是python下使用SAX才操作XML文件的。SAX是基于事件驱动的。在处理过程中,它将XML文档的处理转化为一系列事件的处理,通过事件处理器处理XML文档。它的速度很快,而且占用的内存很小,适用于一些比较大的XML...
java学习笔记——使用DOM解析XML和使用SAX解析XML
使用java语言对XML文档进行解析的示例,包括DOM,SAX方式,并包括使用jdom和jom4j框架进行XML解析或生成XML文档
sax解析XML方式的代码及特点,sax解析XML方式的代码及特点,sax解析XML方式的代码及特点,sax解析XML方式的代码及特点
Sax解析xml中的某个(一部分报文节点)循环组的内容