加载时XDocument无效字符 - ' \ v',十六进制值0x0B,是无效字符

时间:2016-08-02 00:01:59

标签: c# xml adobe-connect

我正在从Adobe Connect API下载一些XML内容。我正在将内容加载到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

以下是来自Adobe Connect API的XML示例。注意:此示例包含无效字符。

<?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包含在内,以响应此blog post by Paul Selles

我已经读过这个帖子了: How to prevent System.Xml.XmlException: Invalid character in the given encoding

然而,这并不能解决我的问题。显然,XML标准会使读者在读取文档后默认使用声明的文档编码。如果我的文档中没有声明,则默认为UTF-8。 See this answer.

0 个答案:

没有答案