当前位置: 首页 > 知识库问答 >
问题:

如何修复错误“prolog中不允许org.xml.sax.SAXParseException/Content”?

墨宜人
2023-03-14

我有以下两种方法的课程openInputStream创建一个输入流,然后将其送入readDocument以从该流创建XML文档。

public class XmlReader {
    protected InputStream openInputStream(final String path)
            throws IOException {
        final InputStream inputStream;
        inputStream = IOUtils.toInputStream(path, "UTF-8");
        return inputStream;
    }
    protected Document readDocument(final InputStream stream)
            throws ParserConfigurationException, SAXException, IOException {
        final DocumentBuilderFactory dbfac =
                DocumentBuilderFactory.newInstance();
        final DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
        return docBuilder.parse(stream);
    }
}

然后我有以下测试

public class XmlReaderTests {
    @Test
    public void parsingOfMapFiles() throws IOException,
            SAXException, ParserConfigurationException {
        final String[] dirs = new String[] {
                "01_Phoenix1",
                "02_Phoenix2",
                "03_Guadalupe",
                "04_SanDiego_MiramarRoad",
                "05_Berlin_Alexanderplatz",
                "06_Portland_ForestAvenue",
                "07_Hartford_LafayetteHudsonStreet",
                "08_FortWorth",
                "09_Charleston_CalhounStreetMeetingStreet",
                "10_LosAngeles_PershingSquare",
                "11_Uelzen"
        };
        for (final String dir : dirs) {
            final XmlReader objectUnderTest = new XmlReader();
            final String path =
                    String.format("src/test/resources/mc/E-2015-10-13_1/%s/map.osm",
                            dir);
            final File file = new File(path);
            Assert.assertTrue(file.canRead());
            final InputStream inputStream =
                    objectUnderTest.openInputStream(file.getAbsolutePath());
            final Document doc = objectUnderTest.readDocument(inputStream);
            Assert.assertNotNull(doc);
        }
    }
}

抛出异常

org。xml。萨克斯。SAXParseException;行号:1;列数:1;prolog中不允许包含内容。在com。太阳组织。阿帕奇。薛西斯。内部的解析器。DOMParser。在com上解析(DOMParser.java:257)。太阳组织。阿帕奇。薛西斯。内部的jaxp。DocumentBuilderImpl。在javax上解析(DocumentBuilderImpl.java:347)。xml。解析器。文档生成器。在XmlReader上解析(DocumentBuilder.java:121)。XmlReaderTests上的readDocument(XmlReader.java:26)。parsingOfMapFiles(XmlReaderTests.java:40)

您可以在这里找到我试图阅读的源代码和XML文件。

如何修复此错误?

更新1:更改openStream

protected InputStream openInputStream(final String path)
        throws IOException {
    return new BOMInputStream(IOUtils.toInputStream(path, "UTF-8"));
}

protected InputStream openInputStream(final String path)
        throws IOException {
    return new BOMInputStream(IOUtils.toInputStream(path));
}

没有帮助。

更新2:

如果我像那样更改openInputStream方法

protected InputStream openInputStream(final String path)
        throws IOException {
    BOMInputStream inputStream = new BOMInputStream(IOUtils.toInputStream(path, "UTF-8"));
    System.out.println("BOM: " + inputStream.hasBOM());
    return inputStream;
}

我得到这个输出:

BOM: false[致命错误]: 1:1: prolog中不允许有内容。


共有3个答案

乐正心水
2023-03-14

为了解决这个问题,我必须在web中正确设置部署描述符。我的Tomcat应用程序的xml。

<web-app id="WebApp" 
   xmlns="http://java.sun.com/xml/ns/j2ee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">
   [...]
</web-app>
韩夕
2023-03-14

如果xml文件开头的一些空白显示此问题。

但是,如果您使用cURL将文件从本地机器传输到某个服务器,在从本地到服务器的POST期间,在路径之前,您必须在路径的开始处提及符号“@”。

例如:如果要在某个路径中发布文件,则必须将路径指定为:“@D:/cURL/post”等。。

颛孙品
2023-03-14

XmlReader中。openInputStream,更改

inputStream = IOUtils.toInputStream(path, "UTF-8");

inputStream = new FileInputStream(new File(path));

IOUtils。toInputStream将给定字符串转换为InputStream,在本例中是包含路径的字符串,而不是文件本身。

 类似资料:
  • <?xml version=“1.0”encoding=“UTF-8”?> ** 和xml文件的bebinning: <?xml version=“1.0”encoding=“UTF-8”?> ... 即将出现的错误: 原因:org.xml.sax.SAXParseException;行号:2;列号:1;Prolog中不允许包含内容。在org.apache.xerces.parsers.dompa

  • 我有一个用UTF-16 LE编码的超级简单的XML文档。 我这样加载它(使用): 我通过保存文件并用十六进制编辑器检查它,检查了没有额外的BOM/垃圾符号(前导或任何地方)。XML格式正确。 但是,我仍然得到以下错误: 我上下搜索了这个错误,但他们都说这是BOM的错误,我(据我所知)已经证实不是这样。还有什么不对劲?

  • 我正在使用Java,并试图从一些http链接获取XML文档。我使用的代码是: 不要注意,它是一个特殊的类,就像普通的输入流一样。 使用上面的代码,我有时会得到错误

  • 我使用最新的Android Studio 1.3.2(OS Windows 7),在资产目录我把2 apks,当我试图编译我收到这个错误。 如何解决此错误?任何建议都有很大帮助。

  • 我一直在使用Android Studio和Ubuntu13.10没有问题。我决定更新到14.04,现在我无法让Android工作室工作。Gradle无法构建并不断地说错误:Prolog中不允许内容。我所做的只是从头开始创建一个新项目。 > Ubuntu 14.04是从刚擦除的分区安装的 使用Android Studio V5.7,但我也尝试了V4.6 我安装了Oracle JDK,并相应地设置了$

  • 这是一个XML文档(XML声明和XSLT处理指令之前的句子和空格是输入的一部分): 我正在解析XML并使用XPath。在大多数XML文件中,第一行包含一些文本或空格(参考上面的XML) 如果没有前导文本,则会成功解析,但如果出现任何文本,则会产生以下错误: [致命错误]:1:1:Prolog中不允许有内容。 我怎么能绕过这件事? 我正在使用的代码: 我可以手动删除文本并执行,但我需要在我的代码中解