xml声明仅允许在文档的开头

时间:2013-03-09 16:09:51

标签: java xml jsp

我正在尝试从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

5 个答案:

答案 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来删除它

http://en.wikipedia.org/wiki/Byte_order_mark

答案 4 :(得分:0)

是php Storm的一个bug 如果你使用phpstorm,phpstorm让你的代码从第二行开始(不管你做什么)!所以你应该去你的主机并通过直接管理员或 cpanel 编辑器编辑你的文件,然后把你的

 <?xml version=“1.0” encoding=“UTF-8” ?>

第一行代码,“希望能帮到你”