次の例外は、クライアントのマシン上で発生していることが報告されました:XElement.SaveがXmlUtf8RawTextWriterが例外をスローするようになり
System.ArgumentException: '', hexadecimal value 0x1F, is an invalid character.
at System.Xml.XmlUtf8RawTextWriter.InvalidXmlChar(Int32 ch, Byte* pDst, Boolean entitize)
at System.Xml.XmlUtf8RawTextWriter.WriteElementTextBlock(Char* pSrc, Char* pSrcEnd)
at System.Xml.XmlUtf8RawTextWriter.WriteString(String text)
at System.Xml.XmlUtf8RawTextWriterIndent.WriteString(String text)
at System.Xml.XmlWellFormedWriter.WriteString(String text)
at System.Xml.Linq.ElementWriter.WriteElement(XElement e)
at System.Xml.Linq.XElement.WriteTo(XmlWriter writer)
at System.Xml.Linq.XElement.Save(XmlWriter writer)
at System.Xml.Linq.XElement.Save(String fileName, SaveOptions options)
at System.Xml.Linq.XElement.Save(String fileName)
残念ながら、これ以上の情報が提供されています。
エラーはちょっと困っています。
0x1F
は疑問です。一部の要素または属性の名前に疑問符が含まれていた場合(これは不正です)、ディスクに保存するときではなく、無効な名前のXElement
またはXAttribute
を作成するときに例外がスローされます。
XmlUtf8RawTextWriter
クラスで例外がスローされました。内部ではXElement
が使用していると思います(アプリケーションではありません)。 XElement
は、それ自体でコーディングの問題などを処理することが期待できませんか?何が原因でクラッシュする可能性がありますか?それはいくつかのOSやフレームワークの非互換性ですか?
私の質問はかなり曖昧ですが、私は限られた情報を操作する必要があります。
私は誰かが少なくとも正しい方向に私を指すことができれば感謝します。私は前にこのようなエラーは見ていません。
感謝を:
はここで、それは場合に役立ちます、しかし、問題を再現します短いが完全なプログラムです。しかし、 'XElement'はエスケープする必要がある文字(アンパサンドなど)を自動的にエスケープしたり、CDATAブロックにラップしたりしませんか? 'XElement'の内容を"手動で "どのようにして浄化しますか? –
@Morawski:いいえ - あなたは単純にCDATAではなく、XMLで直接それらの文字を表現することはできません。サニタイズするには、コンテンツに無効な文字が含まれているかどうかをチェックし、そうであれば置換するメソッドを記述したいと思うでしょう。 (正規表現を置き換える*が*最速のアプローチになる可能性があります)XElementに入る前に、私があなただったとしてもそれをやり遂げます。 –