BizTalk 2010 WCF删除处理指令

时间:2017-07-12 07:48:24

标签: wcf biztalk biztalk-2010

我需要从公共网站(http://www.tcmb.gov.tr/kurlar/201707/10072017.xml)下载XML文件以获取汇率。 但是我有一个问题,因为XML包含一个xml-stylesheet处理指令。

<?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" >

我使用带有webHttpBindng的WCF-Custom端口和来自bLogical的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的情况下访问我的消息内容?我只是试图找到一种方法来删除该行或使解析器忽略它。

1 个答案:

答案 0 :(得分: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);
  }