Xml解析Exception:Content is not allowed in prolog

本文探讨了在解析XML文件时遇到错误的原因,分析了BOM(ByteOrderMark)可能引发的问题,并提供了使用UltraEdit或EmEditor解决此类异常的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常信息:

       Error on line 1 of document  : Content is not allowed in prolog. Nested exception: Content is not allowed in prolog.

 

分析原因:

 

       解析一个XML时引起次异常,可能是由于BOM引起的。

       BOM:Byte Order Mark,中文名字节顺序标记。UCS规范建议在传输字节流前,先传输BOM来判断字节顺序。其实UTF-8是不需要用BOM来表明字节顺序的,但是可以 用BOM来表明编码方式。BOM的UTF-8编码是EF BB BF,所以呢,如果接受者收到EF BB BF开头的字节流,就说明它是UTF-8编码了。

 

解决办法:

 

      可以用UltraEdit或者EmEditor打开XML,然后另存为,保存的时候有选项是以无BOM的UTF-8保存还是以有BOM的UTF-8保存。

本文转自:http://www.myexception.cn/xml-soap/678826.html

这个是BeanShell Sampler 的代码import java.net.*; import java.io.*; try { // 创建TCP连接 Socket socket = new Socket("10.192.32.178", 9810); socket.setSoTimeout(5000); // 发送请求 OutputStream out = socket.getOutputStream(); String request = "000947QPC QP2001 <?xml version=\"1.0\" encoding=\"GBK\"?><root><head><transeq>20250626000003s1120110230</transeq><servtp>CMS</servtp><prcscd>QP2001</prcscd><pwdmod></pwdmod><accflg></accflg><router>66</router><termno></termno><cityno></cityno><brchno>0000000</brchno><userid>zxcx002</userid></head><body><req><tranCode>QP2001</tranCode><busiChannel>000000</busiChannel><transq>20211126000003s1120110230</transq><rptType>A</rptType></req></body></root>"; out.write(request.getBytes("GBK")); out.flush(); // 接收响应 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String response = ""; String line; while ((line = in.readLine()) != null) { response += line + "\n"; } response= response.replace("000550QPC QP2001 ", ""); // 将响应保存到JMeter变量中 vars.put("tcpResponse", response); // 关闭连接 in.close(); out.close(); socket.close(); // 设置取样器成功 SampleResult.setSuccessful(true); SampleResult.setResponseData(response, "GBK"); } catch (Exception e) { SampleResult.setSuccessful(false); SampleResult.setResponseMessage(e.toString()); } 以下是 BeanShell PostProcessor的代码 import javax.xml.parsers.*; import org.w3c.dom.*; import javax.xml.xpath.*; String response = prev.getResponseDataAsString(); try { // 创建Document对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new java.io.ByteArrayInputStream(response.getBytes())); // 创建XPath对象 XPathFactory xPathfactory = XPathFactory.newInstance(); XPath xpath = xPathfactory.newXPath(); // 提取参数(示例:提取<sessionId>标签的值) String url = xpath.evaluate("/root/body/resp/rptURL", doc); String rptTocken = xpath.evaluate("/root/body/resp/rptTocken", doc); String rptURL = url.substring(7, 20); String port = url.substring(21, 25); String local = url.substring(26); // 保存参数 log.info("rptURL:"+rptURL); log.info("port:"+port); log.info("local:"+local); log.info("rptTocken:"+rptTocken); vars.put("rptURL", rptURL); vars.put("port", port); vars.put("local", local); vars.put("rptTocken", rptTocken); } catch (Exception e) { log.error("解析XML失败: " + e.getMessage()); } http请求配置如图 非gui运行代码后出现 ERROR - jmeter.util.BeanShellTestElement: 解析XML失败: Content is not allowed in prolog. 2025/07/09 13:40:28 ERROR - jmeter.util.BeanShellTestElement: 解析XML失败: Content is not allowed in prolog. 2025/07/09 13:40:28 ERROR - jmeter.util.BeanShellTestElement: 解析XML失败: Content is not allowed in prolog. 服务器是linux jmeter安装在window 解决办法 怎么操作
最新发布
07-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值