2017-07-12 58 views
2

我需要從公共網站(http://www.tcmb.gov.tr/kurlar/201707/10072017.xml)下載XML文件以獲得匯率。 但是我有一個問題,因爲XML包含一個xml樣式表處理指令。BizTalk 2010 WCF刪除處理指令

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="isokur.xsl"?> 
<Tarih_Date Tarih="07.07.2017" Date="07/07/2017" Bulten_No="2017/131" > 

我使用WCF自定義端口與bLogical中的webHttpBindng和BizTalk REST入門工具包。一切工作正常,但是當我試圖解析傳入的XML,我得到該處理指令的錯誤。

System.Xml.XmlException:不支持處理指令(XML聲明除外)和DTD。 2號線,位置2.

我不知道最好的方法是解決這個問題。我試圖遵循本指南WCF Errors on XML Deserialization,但當我嘗試使用CreateBufferedCopy方法訪問消息內容時,它仍然失敗。

using (var readStream = new System.IO.MemoryStream()) 
{ 
     using (var buffer = reply.CreateBufferedCopy(int.MaxValue)) 
     { 
     buffer.WriteMessage(readStream); 
     } 

     readStream.Position = 0; 
     xdoc.Load(readStream); 
} 

有沒有人知道如何在不實際解析XML的情況下訪問消息的內容?我只是試圖找到一種方法來刪除該行或使解析器忽略它。

+0

什麼是你正在使用的CreateBufferedCopy()方法時收到錯誤一點點? –

+0

與上述相同的錯誤。 System.Xml.XmlException:不支持處理指令(XML聲明除外)和DTD。第2行,第2位。 –

+0

你在哪裏執行該代碼?在接收管道的解碼部分?此外,該代碼似乎無法刪除樣式表信息 – Dijkgraaf

回答

0

我終於找到了解決方案。我創建了一個基於您可以在線查找的CustomTextMessageEncoder的消息編碼器,而不是消息檢查器。 使用ReadMessage方法我剛添加的代碼

public override Message ReadMessage(System.IO.Stream stream, int maxSizeOfHeaders, string contentType) 
    { 
     XmlReaderSettings xsettings = new XmlReaderSettings(); 
     xsettings.IgnoreProcessingInstructions = true; 
     XmlReader reader = XmlReader.Create(stream,xsettings); 
     return Message.CreateMessage(reader, maxSizeOfHeaders, this.MessageVersion); 
    }