2017-07-12 35 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); 
    }