`
giraffeql
  • 浏览: 16785 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SAX生成XML时空指针

    博客分类:
  • Java
阅读更多
在同时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文件实例

    SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...

    android sax ,dom生成xml文件

    android sax ,dom生成xml文件

    sax生成并解析大文件的xml

    用sax写的生成大XML文件。 用SAX写的解析大XML文件。 在解析大的XML文件,从java语言来说的话,目前应该SAX是比较好用的一个框架。

    Sax解析XML文件解析

    Sax解析XML文件解

    Java SAX解析Xml文档Demo

    Java SAX解析Xml Demo(详细注释)

    Servlet利用SAX解析XML文档

    Servlet利用SAX解析XML文档,JAX,JSWDP,Servlet利用SAX解析XML文档

    Sax解析xml文件

    Sax解析xml文件详细例子,解析复杂节点的xml,把内容显示到view中,例子简单完整,易用

    sax_解析生成xml

    一个实现SAX的解析器(也就是“SAX Parser”)以一个串流解析器的型式作用,拥有事件驱动API。由使用者定义回调函数,解析时,若发生事件的话会被调用。SAX事件包括: XML 文字 节点 XML 元素 节点 XML 虚理指令 ...

    Servlet利用SAX解析XML文档(新上传的有源码)

    Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有...

    SAX_XML.rar_XML SAX_sax xml_xml

    使用Sax解析XML,演示了如何使用SAX接口来解析xml,有主要方法的介绍。

    android 使用Sax解析XML 源码实例

    使用SAX方式解析XML SAX 是读取和操作 XML 数据的更快速、更轻量的方 法。SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。它不涉及 DOM 所必需的开销和概念跳跃。 SAX API是一个基于事件...

    QT使用SAX读取xml高效-快速.rar

    QT使用SAX读取xml高效-快速.rar SAX(Simple API for XML) 如果你只想读取并显示整个XML文档,那么SAX是很好的选择,因为它提供了比DOM更简单的接口,并且它不需要将整个XML文档一次性读入内存,这样便可以用来读取...

    sax解析xml本地读取xml

    sax解析xml本地读取xml,希望对你有用

    sax解析xml

    使用sax解析xml的源代码

    JAVA 解析XML生成XML文档实例

    JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    Python SAX处理XML文件

    本代码是python下使用SAX才操作XML文件的。SAX是基于事件驱动的。在处理过程中,它将XML文档的处理转化为一系列事件的处理,通过事件处理器处理XML文档。它的速度很快,而且占用的内存很小,适用于一些比较大的XML...

    使用DOM解析XML和使用SAX解析XML

    java学习笔记——使用DOM解析XML和使用SAX解析XML

    XML-java.rar_XML SAX_sax_sax xml_sax 解析 xml_xml using dom

    使用java语言对XML文档进行解析的示例,包括DOM,SAX方式,并包括使用jdom和jom4j框架进行XML解析或生成XML文档

    sax解析XML方式的代码及特点

    sax解析XML方式的代码及特点,sax解析XML方式的代码及特点,sax解析XML方式的代码及特点,sax解析XML方式的代码及特点

    Sax解析xml中的某个(一部分报文节点)循环组的内容

    Sax解析xml中的某个(一部分报文节点)循环组的内容

Global site tag (gtag.js) - Google Analytics