美文网首页我爱编程
XML解析错误:xml处理指令不在外部实体的开始部分

XML解析错误:xml处理指令不在外部实体的开始部分

作者: 厨房有只偷吃的猫 | 来源:发表于2017-08-14 15:41 被阅读79次

在学习《锋利的jQuery》第六章,jquery与Ajax中

$.get()方法获取XML文档信息时遇到这样一个问题:

下面的代码执行后无法获取到XML文档中的信息

$(function(){

   $("#send").click(function(){

                $.get("get2.jsp", {

                               username :  encodeURI( $("#username").val() ) ,

                               content :  encodeURI( $("#content").val() )

                       }, function (data, textStatus){  

                              var username = $(data).find("comment").attr("username");

                              var content = $(data).find("comment content").text();

                              username =  decodeURI(username);

                              content = decodeURI(content);   

                              var txtHtml = "<div class='comment'><h6>"+username+":              </h6><pclass='para'>"+content+"</p></div> "; 

                              $("#resText").html(txtHtml); // 把返回的数据添加到页面上

                       });

         })

})

对应的jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<% 

String username = request.getParameter("username"); 

String content = request.getParameter("content"); 

response.setContentType("text/xml"); 

out.println("<?xml version='1.0' encoding='UTF-8'?>"); 

out.println("<comments>"); 

out.println("<comment username='"+username+"'>"); 

out.println("<content>"+content+"</content>"); 

out.println("<comment>"); 

out.println("</comments>");

%>

打开http://localhost:8080/jsp/demo3-get/get2.jsp文件后,显示如下内容:

XML 解析错误:XML 或文本声明不在实体的开头

位置:http://localhost:8080/jsp/demo3-get/get2.jsp

行 2,列 1:

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

^

解决方法有两种(方案来自博客园 ):

一种当然是注释掉,它不会影响xml文件结构;

二是加入out.clear(),清除页面上所有东西(因为上面的错误可能是由于不适当的空格或空行引起的,但这些元素又是我们在文档中看不到的)

out.clear() 位置为:

response.setContentType("text/xml");的后面 ,out.println("<?xml version='1.0' encoding='UTF-8'?>");的前面。

同理,PHP中的解决方法也是同样的

解决办法:在php页面头部增加ob_clean();就可以正常显示

解决方法原理:在要输出xml之前,先清空缓存区,ob_clean();就能够正常输出数据了


相关文章

  • XML解析错误:xml处理指令不在外部实体的开始部分

    在学习《锋利的jQuery》第六章,jquery与Ajax中 $.get()方法获取XML文档信息时遇到这样一个问...

  • XXE攻击原理

    1简述 XXE(XML External Entity)是指xml外部实体攻击漏洞。XML外部实体攻击是针对解析X...

  • 防止XXE攻击:XML解析存在的安全问题指引

    描述 XML 解析器无法预防和限制外部实体进行解析,这会使解析器暴露在 XML External Entities...

  • java xxe漏洞

    一、XXE漏洞简介 1、XXE(XML外部实体注入,XML External Entity) ,在应用程序解析XM...

  • JAVA的XXE漏洞

    1. XXE简介 XXE(XML外部实体注入,XML External Entity) ,漏洞在对不安全的外部实体...

  • XXE

    XXE(Xml external entity -injection) xml外部实体注入XML 指可扩展标记语言...

  • PHP 将xml和数组相互转化

    将xml字符串转化为数组 function xmlToArray($xml){ //禁止引用外部xml实体 l...

  • 2019-08-27

    XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻...

  • XML里的特殊字符处理

    在XML文档中,有些字符会被XML解析器当作标记进行处理。如果希望把这些字符作为普通字符处理,就需要使用实体引用或...

  • XXE漏洞知识整理

    XXE -"xml external entity injection"既"xml外部实体注入漏洞"攻击者可以注入...

网友评论

    本文标题:XML解析错误:xml处理指令不在外部实体的开始部分

    本文链接:https://www.haomeiwen.com/subject/gsyurxtx.html