我有以下两种方法的课程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中不允许有内容。
为了解决这个问题,我必须在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>
如果xml文件开头的一些空白显示此问题。
但是,如果您使用cURL将文件从本地机器传输到某个服务器,在从本地到服务器的POST期间,在路径之前,您必须在路径的开始处提及符号“@”。
例如:如果要在某个路径中发布文件,则必须将路径指定为:“@D:/cURL/post”等。。
在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中不允许有内容。 我怎么能绕过这件事? 我正在使用的代码: 我可以手动删除文本并执行,但我需要在我的代码中解