`

sax错误:org.xml.sax.SAXParseException: Content is not allowed in prolog

 
阅读更多

原因及其解决办法:

1.xml编码错误

该xml是UTF-8编码的,如果该文件通过UltraEdit编辑后,会在无BOM头的UTF-8文件中加入BOM,但是DOM4j不认这个BOM(dom4j1.3),解决的办法可以通过升级dom4j到1.6解决www.dom4j.org

什么是BOM?http://www.unicode.org/faq/utf_bom.html#22Unicode规范中有一个BOM的概念。BOM——Byte Order Mark,就是字节序标记。在这里找到一段关于BOM的说明:

在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。

UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。

Windows就是使用BOM来标记文本文件的编码方式的。

 

2.xml文件存在非法字符

把xml 动手敲一遍,删除不该有的间隔符:比如空格,制表符(TAB)等。

异常提示是Content is not allowed in prolog.意思就是说文件开头的时候有问题。

怎么去掉BOM:

首先windows自带的记事本会在保存UTF-8编码的文件时不管是否含有BOM一律加上BOM,所以千万别用记事本。比较新版本的UltraEdit(以下简称UE,大家都是这么叫的)都对BOM支持比较好,所以推荐使用新版本的UE来解决这个问题。我用的版本是UltraEdit-32 11.00a+中文版。首先打开UE,选择菜单栏“高级”-“配置”,出现一个选项卡窗口,在“常规”选项卡中找到“保存时对所有UTF-8文件头标记(BOM)”和“对在UltraEdit里创建的新文件写入UTF-8文件头标记(如上面)”,把它们的复选框都取消不选,然后确定。这个时候UE默认情况下就不会对没有BOM的文件加入BOM,注意如果不执行上述操作UE默认也是会加的!那已经含有BOM的文件如何清除BOM呢?下面演示给大家。首先打开文件,选择菜单栏“文件”-“格式转换”-“UTF-8 转 ASCII”,这样文件会被转为ASCII编码,BOM就不会存在了,因为上面说过BOM是在UCS编码的头部的,然后再选择菜单栏“文件”-“格式转换”-“ASCII 转 UTF-8(Unicode编辑)”,这个时候文件会被转回为UTF-8编码,因为我们上面选了不自动加BOM,所以这个时候的文件是不带BOM的,然后保存文件。整个操作过程就完毕了。

分享到:
评论

相关推荐

    org.xml.sax.SAXException: Invalid element

    NULL 博文链接:https://wilian.iteye.com/blog/1992365

    java.lang.ClassNotFoundException: org.jdom.input.SAXBuilder 处理

    SAXBuilder是基于SAX(Simple API for XML)的解析器,SAX是一种事件驱动的XML解析模型,相较于DOM(Document Object Model)更节省内存。SAXBuilder允许开发者用SAX解析器的效率来构建JDOM对象。例如,以下代码展示...

    使用Sax技术读XML文档:SaxReaderXML.rar

    import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class MyContentHandler extends DefaultHandler { @Override public void startElement...

    sax的jar包,xml

    1. **导入所需库**:首先,需要在代码中导入SAX解析器的类,例如`org.xml.sax.XMLReader`和`org.xml.sax.helpers.DefaultHandler`。 2. **创建事件处理器**:定义一个继承自`DefaultHandler`的类,重写其中的回调...

    java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion问题解决方法

    在这个特定的情况下,错误提示`org.apache.xerces.dom.DocumentImpl.setXmlVersion`指出问题源于Apache Xerces的DOM实现,它是一个流行的XML解析库。 `AbstractMethodError`通常意味着缺少了某个依赖或版本冲突。...

    android layout XML解析错误的解决方法

    首先,让我们来看看标题和描述中提到的具体错误:"org.xmlpull.v1.XmlPullParserException: PI must not start with xml" 和 "org.xml.sax.SAXParseException: PI must not start with xml"。这两个错误都是由于XML...

    使用Sax方法读XML文档:SaxReaderXML.zip

    5. **错误处理**:SAX解析器还会在遇到XML格式错误时触发错误处理事件,可以自定义错误处理器来捕获并处理这些异常。 SAX解析器的主要优点在于它的效率和内存占用,因为它是按需解析,只处理当前遇到的元素,不保存...

    logisim271.zip

    电路模拟神器,轻量级,汉化版,logisim简单的说就是一个设计虚拟电路的软件,它可以将预先将一些电路设计出来,作为模拟与验证之用,很多从事这方面教育的人会用的比较多,学习计算机的同学大二的数字逻辑和大三的...

    Java解析XML文档(二):sax读取xml文件导出excel

    首先,创建一个继承自`org.xml.sax.helpers.DefaultHandler`的类,重写其中的方法,如`startElement()`、`endElement()`和`characters()`,以处理XML元素的开始、结束和字符数据。 2. **注册解析器**: 使用`org....

    解析XML所需的jar sax.jar

    3. **错误处理器**:通过实现`org.xml.sax.ErrorHandler`接口,我们可以处理解析过程中遇到的错误和警告。 4. **配置解析器**:通过`XMLReaderFactory`类,我们可以创建一个`XMLReader`实例,并设置内容处理器和...

    sax解析xml本地读取xml

    1. **初始化解析器**:首先,我们需要创建一个SAX解析器实例,这通常通过实现`org.xml.sax.XMLReader`接口或使用`javax.xml.parsers.SAXParserFactory`类来完成。 2. **设置事件处理器**:SAX解析器在解析XML文档时...

    一个关于sax解析xml的demo

    2. 创建一个实现了`org.xml.sax.helpers.DefaultHandler`接口的类,覆盖上述提到的事件处理器方法,定义具体的业务逻辑。 3. 实例化`SAXParserFactory`,并调用`newSAXParser()`方法创建`SAXParser`对象。 4. 使用`...

    Matlab高阶谱分析(HOSA)工具箱及安装方法

    org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'area'. One of '{MathWorksID, type}' is expected. 运行hosaver: Warning: Could not find an exact ...

    解决dubbo启动的时候报错,无法读取方案文档 'http://code.alibabatech.com/schema/dubbo/dubbo.xsd'

    解决启动dubbo项目的时候出现,无法读取方案文档 'http://code.alibabatech.com/schema/dubbo/dubbo.xsd',其实在你本地把dubbo.jar文件解压,然后在META-INF下边就有个dubbo.xsd,就是他

    SAX_XML.rar_XML SAX_sax xml_xml

    SAX(Simple API for XML)是XML解析器的一种,它以事件驱动的方式解析XML文档,而非DOM(Document Object Model)解析器那样将整个XML文档加载到内存中。SAX解析器在处理大型XML文件时更高效,因为它只在需要时读取...

    java操作xml dom dom4j sax jdom

    在JDOM中,你可以通过`SAXBuilder`解析XML,然后使用`getRootElement()`获取根元素,再利用`getChild()`和`addContent()`等方法操作XML结构。 以上四种方式各有优缺点,DOM适合小文件并要求快速访问任何部分,SAX...

    org.dom4j.jar

    当我们遇到“java.lang.ClassNotFoundException: org.dom4j.DocumentException”的错误提示时,这通常意味着系统中缺少了DOM4j库,只需将“org.dom4j.jar”添加到项目类路径中即可解决此问题。 DOM4J是基于DOM和SAX...

    sax.jar sax.jar

    sax.jar sax.jar sax.jar sax.jar sax.jar sax.jar sax.jar

    XML解析方式SAX和DOM比较.

    在Java中,解析XML文档主要有两种常见方式:SAX(Simple API for XML)和DOM(Document Object Model)。本文将深入探讨这两种解析方式的区别、优缺点以及适用场景。 **SAX解析** SAX解析是一种事件驱动的解析方法...

    SAX类解析XML

    import org.xml.sax.helpers.DefaultHandler; public class SAXExample extends DefaultHandler { @Override public void startElement(String uri, String localName, String qName, Attributes attributes) ...

Global site tag (gtag.js) - Google Analytics