You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

POST请求发送XML文档遇Prolog内容不允许错误的解决咨询

解决XML POST请求的SAXParseException错误

问题原因

你遇到的org.xml.sax.SAXParseException; Content is not allowed in prolog错误,核心原因有两个:

  • 通过document.implementation.createDocument创建的XML文档对象,默认不会包含XML声明(<?xml version="1.0" encoding="UTF-8"?>),部分服务器解析器要求必须有这个声明才能正常解析。
  • 若直接发送XMLDocument对象而非序列化后的字符串,浏览器可能以不符合预期的格式传递数据,导致解析器在文档开头检测到非法内容。

解决方案

修改jsToXML函数,将XML文档对象序列化为带声明的字符串,而非直接返回文档对象:

export function jsToXML(film, crudOp) {
  // 创建文档和元素
  var xmlDoc = document.implementation.createDocument(null, "film");

  var title = xmlDoc.createElement("title");
  var year = xmlDoc.createElement("year");
  var director = xmlDoc.createElement("director");
  var stars = xmlDoc.createElement("stars");
  var review = xmlDoc.createElement("review");

  // 编辑/删除操作添加ID节点
  if (crudOp === "edit" || crudOp === "delete") {
    var id = xmlDoc.createElement("id");
    id.append(film.id);
    xmlDoc.documentElement.appendChild(id);
  }

  // 为节点赋值
  title.append(film.title);
  year.append(film.year);
  director.append(film.director);
  stars.append(film.stars);
  review.append(film.review);

  // 将节点添加到根元素
  xmlDoc.documentElement.appendChild(title);
  xmlDoc.documentElement.appendChild(year);
  xmlDoc.documentElement.appendChild(director);
  xmlDoc.documentElement.appendChild(stars);
  xmlDoc.documentElement.appendChild(review);

  // 序列化文档并添加XML声明
  const serializer = new XMLSerializer();
  // 手动拼接声明,确保编码与请求头一致
  const xmlStr = '<?xml version="1.0" encoding="UTF-8"?>' + serializer.serializeToString(xmlDoc);
  return xmlStr;
}

关键注意事项

  1. 请求头匹配:发送POST请求时,务必设置正确的Content-Type头,确保编码与XML声明一致:
fetch("/your-api-url", {
  method: "POST",
  headers: {
    "Content-Type": "application/xml; charset=UTF-8",
  },
  body: jsToXML(yourFilmData, "create"),
});
  1. 避免多余字符:确保XML字符串开头没有空格、换行或特殊字符,这些也会触发相同的解析错误。
  2. 验证XML格式:可将生成的XML字符串复制到在线XML验证工具中检查格式是否合规,排除其他语法问题。

内容的提问来源于stack exchange,提问作者DKWebservices

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:15:38