我正在使用通過SOAP從Web服務下載XML文件的C#客戶端。對於服務上託管的一些較舊的記錄,XML顯然會在其中的某處埋入一個0x14,這會引發「無效的空白字符」異常。我使用Linq將XML轉儲到文件中。有什麼方法可以指示Linq處理無效字符而不會丟失其餘的XML?如何使用Linq處理/清除XML中的無效0x14?
編輯:
下面的代碼我現在有用於把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", [email protected]),
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是一個遞歸函數,我寫來處理通過API調用迭代找到更新的記錄,並將其推到LINQ的功能我張貼了。
您能爲我們提供一些樣本數據嗎? – MarcinJuraszek 2013-03-12 18:50:30
你可以在這裏看看這個解決方案:http://seattlesoftware.wordpress.com/2008/09/11/hexadecimal-value-0-is-an-invalid-character/ – Holger 2013-03-12 18:51:25
如果它帶有無效字節,那麼嚴格說它實際上不是XML ...只是說... – 2013-03-12 18:58:06