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

XML解析失败:预期空白字符,VBA发送POST请求XML文档报错求助

解析XML失败:预期空白字符的原因及解决方案

我来帮你拆解这个问题的根源,然后给出可行的修复方案:

错误原因分析

  1. 错误使用HTML转义符
    你在拼接XML时用了&lt;(代替<)和&amp;(代替&)这类HTML转义字符,但服务器期望接收的是原始XML格式。这些转义符会被XML解析器当作普通文本处理,导致无法识别正确的XML标签结构——解析器看到&时会认为是实体引用的开头,但后续找不到合法的实体结尾,进而触发“预期空白字符”的异常。

  2. XML文档不完整
    你的代码里DOCTYPE声明没有闭合(最后一行是...截断状态),而且缺少后续的XML根元素和闭合标签。不完整的XML结构必然会让解析器无法正常解析。

解决方案

1. 修正XML字符串拼接方式

在VBA中,直接使用原始XML字符即可,只需要用双引号""来转义字符串中的双引号(VBA语法规则),不需要用HTML转义符。

2. 确保XML结构完整

按照目标服务器提供的DTD规范,补全所有必要的标签,包括闭合DOCTYPE声明、根元素及子元素。

修正后的代码示例

Sub testmessage()
    Dim sXML As String, sURL As String, sResponse As String
    Dim WinHttpReq As Object
    
    Set WinHttpReq = CreateObject("MSXML2.ServerXMLHTTP")
    
    ' 正确构建XML字符串,使用原始XML语法,VBA中用""转义"
    sXML = "<?xml version=""1.0"" encoding=""ISO-8859-1""?>"
    sXML = sXML & "<!DOCTYPE pnet_imessage_send PUBLIC ""-//PeopleNet//pnet_imessage_send"""
    sXML = sXML & " ""http://open.peoplenetonline.com/dtd/pnet_imessage_send.dtd"">"
    ' 根据DTD要求添加根元素和子内容,这里请替换为实际需要的内容
    sXML = sXML & "<pnet_imessage_send>"
    sXML = sXML & "    <message_content>测试消息内容</message_content>"
    sXML = sXML & "    <!-- 补充其他符合DTD的必填元素 -->"
    sXML = sXML & "</pnet_imessage_send>"
    
    ' 替换为你的实际服务器请求URL
    sURL = "https://your-target-server.com/api/endpoint"
    
    ' 配置并发送POST请求
    WinHttpReq.Open "POST", sURL, False
    ' 务必设置正确的Content-Type,告诉服务器请求主体是XML
    WinHttpReq.setRequestHeader "Content-Type", "text/xml; charset=ISO-8859-1"
    WinHttpReq.send sXML
    
    ' 获取并输出响应
    sResponse = WinHttpReq.responseText
    MsgBox "服务器响应:" & vbCrLf & sResponse
    
    ' 释放对象
    Set WinHttpReq = Nothing
End Sub

额外注意事项

  • 严格对照pnet_imessage_send.dtd的要求编写XML内容,确保所有必填元素、属性都正确设置,标签嵌套和闭合无误。
  • 如果服务器需要身份验证(比如Basic Auth),可以添加请求头:WinHttpReq.setRequestHeader "Authorization", "Basic " & Base64Encode("用户名:密码")(需要自行实现Base64编码函数)。
  • 可以先把构建好的XML字符串输出到记事本,用本地XML校验工具验证格式是否正确,再发送请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:26:48