【问题标题】:XML fails on  characterXML 在字符上失败
【发布时间】:2019-05-08 22:24:46
【问题描述】:

当从我的远程服务器请求数据时,它会在节点内使用以下标记  进行响应,从而导致解析过程失败。我手动删除了有罪的字符串,它开始工作了。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
...
    <sFName>Bradley</sFName>
    <sLName>L&#x1E;ibbra</sLName>
...

令牌:&amp;#x1E;

Savon 提出的错误是:

Savon::InvalidResponseError: 无法解析响应正文:

【问题讨论】:

    标签: ruby-on-rails ruby xml soap savon


    【解决方案1】:

    &amp;#x1E;(又名信息分隔符二不是allowed character in XML

    [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
    

    因此,您的数据不是 XML,任何符合标准的 XML 处理器都必须报告错误,例如您收到的错误。

    在将数据与任何 XML 库一起使用之前,您必须手动或自动将其视为 文本,而不是 XML,,从而通过删除任何非法字符来修复数据。

    另见How to parse invalid (bad / not well-formed) XML?

    【讨论】:

      【解决方案2】:

      我最初的问题是关于Savon ruby gem。我通过将默认响应解析器更改为:rexml 来解决这个问题。它现在解析无效字符并且不会引发异常。

      但正确的答案是解析格式错误的 XML 或要求提供者修复它。谢谢@kjhughes

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多