SAX错误 - 内容不允许在Prolog中出现

294 阅读3分钟

本文讨论了SAX错误--prolog中不允许有内容。

SAX解析器是XML解析的API,你可以用它来处理XML文件。然而,在使用SAX分析器时,你可能会遇到SAX错误--prolog中不允许有内容。

由于XML声明前的无效文本导致的Sax错误

XML文件的结构是使用标签的。因此,每个XML文件都遵循指定的语法。

如果你在XML声明前放置一个未知的或无效的字符,当你试图使用SAX错误解析文件时,你会得到上述的错误。

让我们看一个使用以下XML文件的例子。

!

下面给出了解析该文件的代码。

package java2blog;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class XmlParser 
{
    public static void main(String[] args) 
    {   
        SAXParserFactory f = SAXParserFactory.newInstance();

        try 
        {
            SAXParser parser = f.newSAXParser();
            parser.parse("sample.xml", new DefaultHandler());
        } 
        catch (ParserConfigurationException | SAXException | IOException e) 
        {
            e.printStackTrace();
        }

    }
}

输出。

org.xml.sax.SAXParseException; systemId: file:///home/stark/eclipse-workspace-java/java2blog/sample.xml; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.

解析器会引发这个错误。然而,你可以通过删除多余的字符和改变文件来纠正它,如下所示。

?xml version="1.0" encoding="utf-8"?

请注意,这个XML文件的开头没有(!)符号。

在XML文件开头的字节顺序标记(BOM)

字节顺序标记是一个特殊的unicode字符,可以表示不同的东西。文本编辑器可以在文件的开头自动插入BOM字符。

当解析在开头插入BOM字符的XML文件时,如果文件被解析为字符流而不是字节流,你可能会遇到SAX解析器错误。

然而,这可能并不总是这样,因为在最新版本的Java中,SAX解析器可以正确解析BOM字符。

你可以使用代码以及在文本编辑器中手动添加或删除文件中的字节顺序标记字符。大多数文本编辑器都提供了添加或删除BOM字符的选项。

将一个不存在的文件传递给解析器

如果你把一个不存在的文件传递给分析器,你会得到SAX分析器错误。如果你不小心没有提供正确的路径,也会发生同样的情况。

因此,即使文件存在,如果它的路径不正确,你最终会得到分析器错误。

让我们看一个例子。

package java2blog;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class XmlParser 
{
    public static void main(String[] args) 
    {   
        SAXParserFactory f = SAXParserFactory.newInstance();

        try 
        {
            SAXParser parser = f.newSAXParser();
            parser.parse("sample_unknown.xml", new DefaultHandler());
        } 
        catch (ParserConfigurationException | SAXException | IOException e) 
        {
            e.printStackTrace();
        }

    }
}

输出。"sample_unknown.xml "文件不存在。

java.io.FileNotFoundException。/home/stark/eclipse-workspace-java/java2blog/sample_unknown.xml (No such file or directory)

但是请注意,在这种情况下,唯一的错误是FileNotFoundException ,而不是解析器错误。

导致解析器错误的不同编码格式

文件的编码格式和你传递给解析器的编码格式之间的差异会导致解析器错误。

例如,如果你的文件是以UTF-8 编码,而你以某种方式将UTF-16 编码传递给解析器,你最终会得到解析器错误。因此,在解析之前,你应该始终检查文件的编码情况。

进一步阅读。

JAXB教程

阅读更多 →

元素 "context:component-scan "的前缀 "context "未被绑定

阅读更多 →

总结

这就是关于SAX错误的全部内容--内容在prolog中是不允许的。你可以在这里阅读更多关于SAX的信息。

希望你喜欢阅读这篇文章。请继续关注更多此类文章。学习愉快!