2

我正在尝试从 jsp 文件中读取 xml 文件。它们都在同一个目录下,我正在使用 BufferReader 从 xml 文件中读取。我收到错误“第 3 行第 6 列错误: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

4

5 回答 5

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始终使用平台默认编码。

于 2013-03-09T19:31:47.317 回答
2

您可以在文档开头添加以下行:

<%@ page trimDirectiveWhitespaces="true" %>

这应该可以解决您的问题。

于 2017-03-14T10:51:43.097 回答
1

xml文件可能有问题,检查它是否包含字节顺序标记,如果是删除它。您可以使用简单的 Notepad++ 通过编辑和检查格式化 UTF-8 而不使用 BOM 来删除它

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

于 2013-03-09T19:55:11.647 回答
0

改变这个:

<?xml version="1.0"encoding="UTF-8"?>

<?xml version="1.0" encoding="UTF-8"?>

您忘记在"1.0"和之间添加空格encoding

于 2013-03-09T16:15:37.943 回答
0

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

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

第一行代码,“希望有帮助”</p>

于 2021-06-22T19:32:14.307 回答