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

Node.js用soap调用Fedex接口上传多页PDF报XML格式错误

嘿,这个问题我之前帮别人排查过类似的,核心原因很明确:你的多页PDF转成Base64后,字符串里包含了XML的特殊字符(比如&、<、>这类),而你没对这些字符做处理,直接塞进XML请求里,导致Fedex的XML解析器读的时候,把这些特殊字符当成了XML标签的一部分,误以为遇到了提前结束的标签,所以抛出了"Unexpected close tag"错误。

单页PDF的Base64内容短,刚好没撞上这些特殊字符,所以流程正常;多页PDF内容长,概率性出现了这类字符,就触发了XML结构崩溃的问题。

解决办法有两种,选一种就行:

  • 用CDATA包裹Base64内容
    XML里的CDATA块会告诉解析器:“这里面的内容是纯文本,别当成XML标签解析”。你只需要把<ns:DocumentContent>里的Base64字符串放在<![CDATA[ ]]>里面就行。比如:

    <ns:DocumentContent><![CDATA[你的多页PDF Base64字符串]]></ns:DocumentContent>
    

    用soap包的话,构造请求参数的时候直接给DocumentContent加上CDATA包裹:

    const uploadRequest = {
      // 其他必填参数(WebAuthenticationDetail、ClientDetail这些)...
      Documents: {
        CustomerReference: "",
        DocumentType: "PRO_FORMA_INVOICE",
        FileName: "1810e200-4467-11e8-b6a8-07a18eeb7b1a.pdf-test.pdf",
        DocumentContent: `<![CDATA[${yourMultiPagePdfBase64}]]>`
      }
    };
    
  • 对Base64做XML实体转义
    把Base64里的特殊字符替换成XML能识别的实体:

    • & → &amp;
    • < → &lt;
    • > → &gt;
    • " → &quot;
    • ' → &apos;
      你可以手动写个简单的替换函数,或者用xml-escape这类npm包来处理,转义完再塞进请求里。

验证小技巧

修改完之后,先把生成的XML请求打印出来,检查<ns:DocumentContent>部分的内容是不是已经正确处理了特殊字符,再发给Fedex测试,应该就能解决这个XML解析错误啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:40:44