2016-08-09 51 views
0

我需要在C#中讀取來自BizTalk服務的響應內容,該服務會發送一些名爲diffgram的內容。我使用SoapUI來查看該服務正在響應。從BizTalk diffgram中讀取XML響應

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body> 
     <ejecutaDqlResponse xmlns="http://tempuri.org/"> 
     <ejecutaDqlResult> 
      <xs:schema id="dql" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
       <xs:element name="dql" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
        <xs:complexType> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
         <xs:element name="Table1"> 
          <xs:complexType> 
           <xs:sequence> 
           <xs:element name="r_object_id" type="xs:string" minOccurs="0"/> 
           <xs:element name="n_tipo_docto" type="xs:string" minOccurs="0"/> 
           <xs:element name="n_fecha_celbrcn" type="xs:string" minOccurs="0"/> 
           </xs:sequence> 
          </xs:complexType> 
         </xs:element> 
        </xs:choice> 
        </xs:complexType> 
       </xs:element> 
      </xs:schema> 
      <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
       <dql xmlns=""> 
        <Table1 diffgr:id="Table11" msdata:rowOrder="0" diffgr:hasChanges="inserted"> 
        <r_object_id>0902c09e80109543</r_object_id> 
        <n_tipo_docto>Asambleas de Accionistas 1.- Acta</n_tipo_docto> 
        <n_fecha_celbrcn>1/1/2014 12:00:00 AM</n_fecha_celbrcn> 
        </Table1> 
        <Table1 diffgr:id="Table12" msdata:rowOrder="1" diffgr:hasChanges="inserted"> 
        <r_object_id>0902c09e8010a95a</r_object_id> 
        <n_tipo_docto>Asambleas de Accionistas Extraordinarias</n_tipo_docto> 
        <n_fecha_celbrcn>3/14/2015 12:00:00 AM</n_fecha_celbrcn> 
        </Table1> 
       </dql> 
      </diffgr:diffgram> 
     </ejecutaDqlResult> 
     </ejecutaDqlResponse> 
    </s:Body> 
</s:Envelope> 

我需要做的唯一的事情就是數不同r_object_id,在這個反應存在。但我無法弄清楚如何去做。我嘗試了dataset.ReadXml,但沒有奏效。

任何人都可以幫助我嗎?

+0

您是否獲得此響應,XML塊或字符串(如圖所示)? – tgolisch

+0

是的。我得到這個作爲一個xmlblock,但是因爲是biztalkservice,我進入我的c#代碼的類是類型「ejecutaDqlResponse」。顯示的字符串是即時通訊使用SOAP UI –

回答

0

嘗試XML LINQ

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 
      XElement diffgram = doc.Descendants().Where(x => x.Name.LocalName == "diffgram").FirstOrDefault(); 
      var results = diffgram.Descendants("r_object_id").Select(x => new { 
       r_object_id = (string)x 
      }).ToList(); 
     } 
    } 
} 
+0

謝謝。由於響應是一個對象,我只是問了Any元素的屬性數量。但是我會嘗試你的迴應。 –