SOAP 経由で Web サービスから XML ファイルをダウンロードする C# クライアントに取り組んでいます。サービスでホストされている一部の古いレコードでは、XML のどこかに 0x14 が埋め込まれているようで、「無効な空白文字」例外が発生します。Linq を使用して XML をファイルにダンプしています。XML の残りの部分を失うことなく無効な文字を破棄するよう Linq に指示する方法はありますか?
編集:
XMLをファイルに入れるために現在持っているコードは次のとおりです。
XDocument c =
new XDocument(
new XElement(nameSpace + "getCitationsResponse",
new XAttribute(XNamespace.Xmlns + "ns1", nameSpace),
new XElement("list",
record.reportDateSpecified ? new XElement("reportDate", record.reportDate) : null,
new XElement("reportType", record.reportType),
new XElement("title", record.title),
new XElement("projectNumber", record.projectNumber),
new XElement("author", record.author),
new XElement("abstract", record.@abstract),
new XElement("numPages", record.numPages),
record.isDataTypeSpecified ? new XElement("isDataType", record.isRestrictedData) : null,
new XElement("comments", record.comments),
new XElement("attachments", from a in record.attachments
select new XElement("list",
new XElement("id", a.id),
new XElement("filePath", a.filePath),
new XElement("type", a.type)))));
通常の理由で一部をハッキングする必要がありましたが、削除したものはここに表示されているものと同じです.
投稿する前に SoapUI を使用して、欠陥がどこにあるかを把握できるかどうかを確認しましたが、SoapUI には何も表示されず、エラー自体も生成されません。
編集#2:
正確なエラー メッセージとスタック トレースを次に示します。実際にそれについて何かできるのか、それとも、どのレコードに無効な文字が含まれているかをログに記録し、SoapUI を使用して手動でプルダウンする必要があるだけなのか、疑問に思います。
Invalid white space character (0x14) in text to output
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at Downloader.WebService.ApiService.getRecords(String username, String[] ids)
at Downloader.Central.RecordLoop(ApiService svc, Int32 offset, String username)
getRecords は、wsdl によって生成された API 呼び出しです。RecordLoop は、更新されたレコードを見つけて、既に投稿した Linq 関数にプッシュする API 呼び出しの反復処理を処理するために作成した再帰関数です。