XDocument Invalid Characters On Load — '\v', шестнадцатеричное значение 0x0B, является недопустимым символом

Я загружаю XML-контент из Adobe Connect API. Я загружаю содержимое в XDocument и просматриваю все элементы sco, чтобы сохранить их в базе данных. Однако один из вызовов API содержит недопустимый символ, который вызывает исключение:

System.Xml.XmlException: '', hexadecimal value 0x0B, is an invalid character. Line 2, position 6495.
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.Throw(String res, String[] args)
at System.Xml.XmlTextReaderImpl.ParseText(Int32& startPos, Int32& endPos, Int32& outOrChars)
at System.Xml.XmlTextReaderImpl.ParseText()
at System.Xml.XmlTextReaderImpl.ParseElementContent()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r)
at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r, LoadOptions o)
at System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options)
at System.Xml.Linq.XDocument.Load(XmlReader reader)
at ACRS.DataRefresherApp.Program.GetFolderContents(Folder parentFolder, AcrsDbContext db) in xxx:line 164

Вот пример XML-кода, полученного от Adobe Connect API. Примечание: этот пример не содержит недопустимый символ.

<?xml version="1.0"?>
<results>
    <status code="ok"/>
    <scos>
        <sco is-folder="1" duration="" display-seq="0" icon="folder" type="folder" folder-id="xx" source-sco-id="" sco-id="xx">
            <name>Shared Templates</name>
            <url-path>/f1101964883/</url-path>
            <date-created>2010-09-16T15:21:15.993+10:00</date-created>
            <date-modified>2013-12-11T22:31:05.130+11:00</date-modified>
            <is-seminar>false</is-seminar>
        </sco>
        .....
    </scos>
</results>

Вот код, который я использую для чтения/загрузки данных XML.

Stream responseStream = response.GetResponseStream();
XmlReader xmlReader = XmlReader.Create(responseStream, new XmlReaderSettings() { CheckCharacters = false });
var xmlResponse = XDocument.Load(xmlReader);
var folders = xmlResponse.Elements("results").Elements("scos").Elements("sco").ToList();

Исключение возникает, когда XDocument пытается загрузить данные из xmlReader.

var xmlResponse = XDocument.Load(xmlReader);

Я понимаю, что мне не нужно использовать XmlReader и я могу загрузить XDocument напрямую из потока. Однако я включил XmlReader в ответ на эту ссылку запись в блоге Пола Селлеса.

Я уже прочитал эту тему: Как чтобы предотвратить System.Xml.XmlException: недопустимый символ в данной кодировке

Однако это не решает мою проблему. По-видимому, стандарты XML заставляют программу чтения по умолчанию использовать объявленную кодировку документа после того, как документ будет прочитан. В случае моего документа, в котором не делается никаких объявлений, по умолчанию он должен быть UTF-8. см. этот ответ.


person Robert    schedule 02.08.2016    source источник
comment
@dbc Я сделал, как вы просили. Однако приведенный выше пример XML-документа не является XML, выдающим мне ошибку. Это всего лишь пример одного из успешных вызовов API с использованием того же кода, что и выше.   -  person Robert    schedule 02.08.2016
comment
Я должен был упомянуть, что конкретная установка Adobe Connect доступна в нескольких странах, где используются разные наборы символов. Таким образом, несмотря на то, что большая часть контента на английском языке, определенный процент находится на разных языках. Символ, отображаемый на моем экране как c с ударением.   -  person Robert    schedule 02.08.2016
comment
Тогда, возможно, поток ответов не utf8. Попробуйте установить кодировку, как показано здесь: Можно ли получить данные из веб-ответа в правильной кодировке   -  person dbc    schedule 02.08.2016
comment
Я пробовал это, и это не имело никакого значения. :(   -  person Robert    schedule 02.08.2016
comment
Затем взгляните на экранирование недопустимых символов XML в C# и XML (де)сериализация недопустимой строки несовместима с С#?. CheckCharacters = false работает только для недопустимых ссылок на сущности, см. XmlReaderSettings CheckCharacters=false, похоже, не работает.   -  person dbc    schedule 03.08.2016