Ошибка XML на & # x1E; персонаж - PullRequest
1 голос
/ 09 мая 2019

При запросе данных с моего удаленного сервера он отвечает значением внутри узла со следующим токеном , что приводит к сбою процесса синтаксического анализа. Я вручную удалил виновную строку, и она начала работать.

<?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>
...

Токен: &#x1E;

Ошибка, выдвинутая Савоном:

Savon::InvalidResponseError: Невозможно проанализировать тело ответа:

Ответы [ 2 ]

1 голос
/ 09 мая 2019

&#x1E; (он же ИНФОРМАЦИОННЫЙ СЕПАРАТОР ДВА ) равен , а не разрешенному символу в XML :

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

Следовательно, ваши данные не являются XML, и любой соответствующий XML-процессор должен сообщать об ошибке, например той, которую вы получили.

Необходимо исправить данные, удалив все недопустимые символы, обработавэто как текст, а не XML, вручную или автоматически перед использованием его с любыми библиотеками XML.

См. также Как анализировать недопустимый (плохо / плохо)на основе) XML?

0 голосов
/ 09 мая 2019

Мой оригинальный вопрос был около Савон рубиновый камень .Я разобрался с этим, изменив парсер ответов по умолчанию на : rexml .Теперь он анализирует недопустимый символ и не вызывает исключение.

:itssomething:

Но правильным ответом будет синтаксический анализ неверно сформированного XML или обращение к провайдеру за исправлением.Спасибо @kjhughes

...