2

Adobe Connect APIからいくつかの XML コンテンツをダウンロードしています。コンテンツを XDocument にロードし、すべての sco 要素を読み取ってデータベースに保存しています。ただし、API への呼び出しの 1 つに無効な文字が含まれているため、例外が発生します。

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 をロードできることがわかりました。ただし、 Paul Selles によるこのブログ投稿に応じて、XmlReader を含めました。

私はすでにこのスレッドを読みました: System.Xml.XmlException を防止する方法: 指定されたエンコーディングの無効な文字

ただし、これで問題は解決しません。どうやら、XML 標準により、ドキュメントが読み込まれると、リーダーは宣言されたドキュメント エンコーディングにデフォルト設定されます。宣言が行われていない私のドキュメントの場合、デフォルトで UTF-8 にする必要があります。この回答を参照してください。

4

0 に答える 0