我正在尝试从jsp文件中读取xml文件。它们都在同一个目录下,我正在使用BufferReader从xml文件中读取。 我收到错误“第6行第3行的错误:xml声明只允许在文档的开头”。在网上搜索原因,我得到的是xml文件不应该以新行开头,但我已经检查了我的xml,删除了开头的每个空格。 这是我程序中唯一的xml文件,所以我真的不知道可能是什么问题。 我正在添加我的xml文件和我的jsp文件..我猜错了但是我不知道是什么。
我的xml文件:
<?xml version="1.0"encoding="UTF-8"?>
<quiz>
<question type="multichoice" >
<name>
<text>Name of question</text>
</name>
<questiontext format="html">
<text>What is the answer to this question?</text>
</questiontext>
<answer fraction="100">
<text>The correct answer</text>
<feedback><text>Correct!</text></feedback>
</answer>
<answer fraction="0">
<text>A distractor</text>
<feedback><text>Ooops!</text></feedback>
</answer>
<answer fraction="0">
<text>Another distractor</text>
<feedback><text>Ooops!</text></feedback>
</answer>
<shuffleanswers>1</shuffleanswers>
<single>true</single>
<answernumbering>abc</answernumbering>
</question>
<question type="truefalse">
<name>
<text>Name of question</text>
</name>
<questiontext format="html">
<text>What is the answer to this question?</text>
</questiontext>
<answer fraction="100">
<text>true</text>
<feedback><text>Correct!</text></feedback>
</answer>
<answer fraction="0">
<text>false</text>
<feedback><text>Ooops!</text></feedback>
</answer>
</question>
<question type="numerical">
<name>
<text>Name of question</text>
</name>
<questiontext format="html">
<text>What is the answer to this question?</text>
</questiontext>
<answer fraction="100">
<text>23</text>
<feedback><text>Feedback</text></feedback>
</answer>
</question>
</quiz>
在定义xml(文件中的第一行)之前没有空格。 和我的jsp文件:
<%@ page contentType="text/xml" %>
<%@ page import="java.io.*" %>
<%
//dump out the file
BufferedReader in = new BufferedReader(new FileReader("questions.xml"));
String line;
while((line = in.readLine())!=null){
out.print(line);
}
in.close();
%>
我是使用java进行html编程的新手,所以如果你可以帮助我的话会很棒.. thanx
答案 0 :(得分:4)
我认为当你导航到JSP页面时,你在浏览器中看到了这个错误。问题出在JSP顶部的页面指令
中<%@ page contentType="text/xml" %>
<%@ page import="java.io.*" %>
由于每个后面跟一个换行符,你最终会在数据之前写入out
两个换行符(由out.println
语句写入),这就是错误信息说明你的原因在第3行有一个XML声明。
删除换行符,或在指令内而不是在指令之间移动换行符应解决此问题:
<%@ page contentType="text/xml"
%><%@ page import="java.io.*"
%><%
BufferedReader ....
另外,为了阅读文件,您应该使用FileInputStream
(或更好application.getResourceAsStream
)和InputStreamReader
显式设置为正确的字符编码以匹配XML文件,而不是依赖总是使用平台默认编码的FileReader
。
答案 1 :(得分:2)
您可以在文档的开头添加以下行:
<%@ page trimDirectiveWhitespaces="true" %>
这可以解决您的问题。
答案 2 :(得分:0)
改变这个:
<?xml version="1.0"encoding="UTF-8"?>
到
<?xml version="1.0" encoding="UTF-8"?>
您忘了在"1.0"
和encoding
之间添加空格。
答案 3 :(得分:0)
xml文件可能存在问题,请检查它是否包含字节顺序标记,如果是,则将其删除。 您可以使用简单的Notepad ++通过编辑和检查格式化UTF-8而无需BOM来删除它
答案 4 :(得分:0)
是php Storm的一个bug 如果你使用phpstorm,phpstorm让你的代码从第二行开始(不管你做什么)!所以你应该去你的主机并通过直接管理员或 cpanel 编辑器编辑你的文件,然后把你的
<?xml version=“1.0” encoding=“UTF-8” ?>
第一行代码,“希望能帮到你”